diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java new file mode 100644 index 0000000..fc881a1 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.data.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 外协管盯 前端控制器 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RestController +@RequestMapping("/system/dataGasOther") +public class DataGasOtherController { + +} + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java new file mode 100644 index 0000000..fc881a1 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.data.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 外协管盯 前端控制器 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RestController +@RequestMapping("/system/dataGasOther") +public class DataGasOtherController { + +} + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java new file mode 100644 index 0000000..b5f3627 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.data.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 外协管盯 Mapper 接口 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Mapper +public interface DataGasOtherMapper extends BaseMapper { + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java new file mode 100644 index 0000000..fc881a1 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.data.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 外协管盯 前端控制器 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RestController +@RequestMapping("/system/dataGasOther") +public class DataGasOtherController { + +} + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java new file mode 100644 index 0000000..b5f3627 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.data.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 外协管盯 Mapper 接口 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Mapper +public interface DataGasOtherMapper extends BaseMapper { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml new file mode 100644 index 0000000..8ce1455 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID, DEVCODE, WELL_CODE, WELL_NUMBER, GASVAL, VBAT, BATSTA, SIN, RSRP, SINR, UPTIME, LOGTIME, SIG, TEMP, SS_STATE + + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java new file mode 100644 index 0000000..fc881a1 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.data.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 外协管盯 前端控制器 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RestController +@RequestMapping("/system/dataGasOther") +public class DataGasOtherController { + +} + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java new file mode 100644 index 0000000..b5f3627 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.data.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 外协管盯 Mapper 接口 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Mapper +public interface DataGasOtherMapper extends BaseMapper { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml new file mode 100644 index 0000000..8ce1455 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID, DEVCODE, WELL_CODE, WELL_NUMBER, GASVAL, VBAT, BATSTA, SIN, RSRP, SINR, UPTIME, LOGTIME, SIG, TEMP, SS_STATE + + + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java new file mode 100644 index 0000000..53972ba --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java @@ -0,0 +1,94 @@ +package com.casic.missiles.modular.data.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 外协管盯 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Builder +@Data +@TableName("data_gas_other") +@ApiModel(value = "DataGasOther对象", description = "外协管盯") +public class DataGasOther implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId("ID") + private Long id; + + @ApiModelProperty("设备编号") + @TableField("DEVCODE") + private String devcode; + + @ApiModelProperty("点位编号") + @TableField("WELL_CODE") + private String wellCode; + + @ApiModelProperty("位号") + @TableField("WELL_NUMBER") + private String wellNumber; + + @ApiModelProperty("气体浓度采样值") + @TableField("GASVAL") + private String gasval; + + @ApiModelProperty("设备电池电压值(毫伏)") + @TableField("VBAT") + private String vbat; + + @ApiModelProperty("电池状态0 正常、 1 低电告警、2 关机") + @TableField("BATSTA") + private String batsta; + + @ApiModelProperty("接收信号强度等级") + @TableField("SIN") + private String sin; + + @ApiModelProperty("接收信号参考质量 服务小 区的 RSRP 值") + @TableField("RSRP") + private String rsrp; + + @ApiModelProperty("信噪比") + @TableField("SINR") + private String sinr; + + @ApiModelProperty("采集时间") + @TableField("UPTIME") + private Date uptime; + + @ApiModelProperty("上传时间") + @TableField("LOGTIME") + private Date logtime; + + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态,0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java new file mode 100644 index 0000000..fc881a1 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.data.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 外协管盯 前端控制器 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RestController +@RequestMapping("/system/dataGasOther") +public class DataGasOtherController { + +} + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java new file mode 100644 index 0000000..b5f3627 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.data.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 外协管盯 Mapper 接口 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Mapper +public interface DataGasOtherMapper extends BaseMapper { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml new file mode 100644 index 0000000..8ce1455 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID, DEVCODE, WELL_CODE, WELL_NUMBER, GASVAL, VBAT, BATSTA, SIN, RSRP, SINR, UPTIME, LOGTIME, SIG, TEMP, SS_STATE + + + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java new file mode 100644 index 0000000..53972ba --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java @@ -0,0 +1,94 @@ +package com.casic.missiles.modular.data.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 外协管盯 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Builder +@Data +@TableName("data_gas_other") +@ApiModel(value = "DataGasOther对象", description = "外协管盯") +public class DataGasOther implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId("ID") + private Long id; + + @ApiModelProperty("设备编号") + @TableField("DEVCODE") + private String devcode; + + @ApiModelProperty("点位编号") + @TableField("WELL_CODE") + private String wellCode; + + @ApiModelProperty("位号") + @TableField("WELL_NUMBER") + private String wellNumber; + + @ApiModelProperty("气体浓度采样值") + @TableField("GASVAL") + private String gasval; + + @ApiModelProperty("设备电池电压值(毫伏)") + @TableField("VBAT") + private String vbat; + + @ApiModelProperty("电池状态0 正常、 1 低电告警、2 关机") + @TableField("BATSTA") + private String batsta; + + @ApiModelProperty("接收信号强度等级") + @TableField("SIN") + private String sin; + + @ApiModelProperty("接收信号参考质量 服务小 区的 RSRP 值") + @TableField("RSRP") + private String rsrp; + + @ApiModelProperty("信噪比") + @TableField("SINR") + private String sinr; + + @ApiModelProperty("采集时间") + @TableField("UPTIME") + private Date uptime; + + @ApiModelProperty("上传时间") + @TableField("LOGTIME") + private Date logtime; + + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态,0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java index 86077b8..f4d4417 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java @@ -76,4 +76,17 @@ private Date logtime; + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态:0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java new file mode 100644 index 0000000..fc881a1 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.data.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 外协管盯 前端控制器 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RestController +@RequestMapping("/system/dataGasOther") +public class DataGasOtherController { + +} + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java new file mode 100644 index 0000000..b5f3627 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.data.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 外协管盯 Mapper 接口 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Mapper +public interface DataGasOtherMapper extends BaseMapper { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml new file mode 100644 index 0000000..8ce1455 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID, DEVCODE, WELL_CODE, WELL_NUMBER, GASVAL, VBAT, BATSTA, SIN, RSRP, SINR, UPTIME, LOGTIME, SIG, TEMP, SS_STATE + + + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java new file mode 100644 index 0000000..53972ba --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java @@ -0,0 +1,94 @@ +package com.casic.missiles.modular.data.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 外协管盯 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Builder +@Data +@TableName("data_gas_other") +@ApiModel(value = "DataGasOther对象", description = "外协管盯") +public class DataGasOther implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId("ID") + private Long id; + + @ApiModelProperty("设备编号") + @TableField("DEVCODE") + private String devcode; + + @ApiModelProperty("点位编号") + @TableField("WELL_CODE") + private String wellCode; + + @ApiModelProperty("位号") + @TableField("WELL_NUMBER") + private String wellNumber; + + @ApiModelProperty("气体浓度采样值") + @TableField("GASVAL") + private String gasval; + + @ApiModelProperty("设备电池电压值(毫伏)") + @TableField("VBAT") + private String vbat; + + @ApiModelProperty("电池状态0 正常、 1 低电告警、2 关机") + @TableField("BATSTA") + private String batsta; + + @ApiModelProperty("接收信号强度等级") + @TableField("SIN") + private String sin; + + @ApiModelProperty("接收信号参考质量 服务小 区的 RSRP 值") + @TableField("RSRP") + private String rsrp; + + @ApiModelProperty("信噪比") + @TableField("SINR") + private String sinr; + + @ApiModelProperty("采集时间") + @TableField("UPTIME") + private Date uptime; + + @ApiModelProperty("上传时间") + @TableField("LOGTIME") + private Date logtime; + + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态,0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java index 86077b8..f4d4417 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java @@ -76,4 +76,17 @@ private Date logtime; + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态:0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java new file mode 100644 index 0000000..842ca0b --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.data.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.data.entity.DataGasOther; + +/** + *

+ * 外协管盯 服务类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +public interface IDataGasOtherService extends IService { + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java new file mode 100644 index 0000000..fc881a1 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.data.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 外协管盯 前端控制器 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RestController +@RequestMapping("/system/dataGasOther") +public class DataGasOtherController { + +} + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java new file mode 100644 index 0000000..b5f3627 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.data.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 外协管盯 Mapper 接口 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Mapper +public interface DataGasOtherMapper extends BaseMapper { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml new file mode 100644 index 0000000..8ce1455 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID, DEVCODE, WELL_CODE, WELL_NUMBER, GASVAL, VBAT, BATSTA, SIN, RSRP, SINR, UPTIME, LOGTIME, SIG, TEMP, SS_STATE + + + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java new file mode 100644 index 0000000..53972ba --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java @@ -0,0 +1,94 @@ +package com.casic.missiles.modular.data.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 外协管盯 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Builder +@Data +@TableName("data_gas_other") +@ApiModel(value = "DataGasOther对象", description = "外协管盯") +public class DataGasOther implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId("ID") + private Long id; + + @ApiModelProperty("设备编号") + @TableField("DEVCODE") + private String devcode; + + @ApiModelProperty("点位编号") + @TableField("WELL_CODE") + private String wellCode; + + @ApiModelProperty("位号") + @TableField("WELL_NUMBER") + private String wellNumber; + + @ApiModelProperty("气体浓度采样值") + @TableField("GASVAL") + private String gasval; + + @ApiModelProperty("设备电池电压值(毫伏)") + @TableField("VBAT") + private String vbat; + + @ApiModelProperty("电池状态0 正常、 1 低电告警、2 关机") + @TableField("BATSTA") + private String batsta; + + @ApiModelProperty("接收信号强度等级") + @TableField("SIN") + private String sin; + + @ApiModelProperty("接收信号参考质量 服务小 区的 RSRP 值") + @TableField("RSRP") + private String rsrp; + + @ApiModelProperty("信噪比") + @TableField("SINR") + private String sinr; + + @ApiModelProperty("采集时间") + @TableField("UPTIME") + private Date uptime; + + @ApiModelProperty("上传时间") + @TableField("LOGTIME") + private Date logtime; + + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态,0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java index 86077b8..f4d4417 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java @@ -76,4 +76,17 @@ private Date logtime; + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态:0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java new file mode 100644 index 0000000..842ca0b --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.data.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.data.entity.DataGasOther; + +/** + *

+ * 外协管盯 服务类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +public interface IDataGasOtherService extends IService { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java new file mode 100644 index 0000000..4c660e9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java @@ -0,0 +1,226 @@ +package com.casic.missiles.modular.data.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.enums.DeviceTypeEnum; +import com.casic.missiles.enums.DictEnum; +import com.casic.missiles.modular.alarm.dto.AlarmDeviceRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.AlarmRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.BusAlarmLedgerDTO; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.data.dao.DataGasMapper; +import com.casic.missiles.modular.data.dao.DataGasOtherMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import com.casic.missiles.modular.data.entity.DataTubeOther; +import com.casic.missiles.modular.data.service.IDataAbstractService; +import com.casic.missiles.modular.data.service.IDataGasOtherService; +import com.casic.missiles.modular.data.service.ITrackLogService; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Optional; + +/** + *

+ * 外协管盯 服务实现类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RequiredArgsConstructor +@Service +public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { + + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + private final DataGasMapper dataGasMapper; + private final IAlarmRecordsService alarmRecordsService; + private final IAlarmRuleService alarmRuleService; + private final ITrackLogService iTrackLogService; + private final IBusDeviceService busDeviceService; + + @Override + public void process(String dataContent) { + + //解析数据+根据业务处理存储数据 + JSONObject json = JSONObject.parseObject(dataContent); + String devCode = json.get("devCode").toString(); + JSONObject jsonObject = json.getJSONObject("mBody"); + if (mType[0].equals(json.get("mType")) || mType[3].equals(json.get("mType"))) {//存储上报数据 + this.processNormalData(jsonObject, devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + this.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.TubeOther.name().equals(json.get("devType"))) { + if ("TubeOtherConfigSuccess".equals(jsonObject.get("bType"))) { +// deviceConfigManager.updateStatus(devCode); + } + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } else if (mType[4].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); +// imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; + try { + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); + } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + } + } + + @Transactional + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.getString("cell"); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = jsonObject.getJSONArray("datas"); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + String bfcf = busDeviceService.getBfcf(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).getString("gasval"); + String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); + String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); + String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataGasOther.builder() + .wellCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .wellNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .devcode(devCode) +// .cell(cell) + .gasval(gas) + .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime))) + .logtime(new Date()) + .vbat(vbat) + .batsta(batsta) + .rsrp(rsrp) + .sin(pci) + .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) + .build());//存储采集数据 + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) continue; + + //3.清除设备告警 + alarmRecordsService.cancelDeviceAlarm(devCode); + //4.存报警 + //若没绑定井,则不产生报警 + boolean alarmFlag = false; + if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { + //获取报警规则 + List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); + for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { + if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && + Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { + alarmFlag = true; + //写入报警 + //1、判断报警是否已存在 + if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.TubeOther.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); + //7.更新管线状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java new file mode 100644 index 0000000..fc881a1 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.data.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 外协管盯 前端控制器 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RestController +@RequestMapping("/system/dataGasOther") +public class DataGasOtherController { + +} + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java new file mode 100644 index 0000000..b5f3627 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.data.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 外协管盯 Mapper 接口 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Mapper +public interface DataGasOtherMapper extends BaseMapper { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml new file mode 100644 index 0000000..8ce1455 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID, DEVCODE, WELL_CODE, WELL_NUMBER, GASVAL, VBAT, BATSTA, SIN, RSRP, SINR, UPTIME, LOGTIME, SIG, TEMP, SS_STATE + + + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java new file mode 100644 index 0000000..53972ba --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java @@ -0,0 +1,94 @@ +package com.casic.missiles.modular.data.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 外协管盯 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Builder +@Data +@TableName("data_gas_other") +@ApiModel(value = "DataGasOther对象", description = "外协管盯") +public class DataGasOther implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId("ID") + private Long id; + + @ApiModelProperty("设备编号") + @TableField("DEVCODE") + private String devcode; + + @ApiModelProperty("点位编号") + @TableField("WELL_CODE") + private String wellCode; + + @ApiModelProperty("位号") + @TableField("WELL_NUMBER") + private String wellNumber; + + @ApiModelProperty("气体浓度采样值") + @TableField("GASVAL") + private String gasval; + + @ApiModelProperty("设备电池电压值(毫伏)") + @TableField("VBAT") + private String vbat; + + @ApiModelProperty("电池状态0 正常、 1 低电告警、2 关机") + @TableField("BATSTA") + private String batsta; + + @ApiModelProperty("接收信号强度等级") + @TableField("SIN") + private String sin; + + @ApiModelProperty("接收信号参考质量 服务小 区的 RSRP 值") + @TableField("RSRP") + private String rsrp; + + @ApiModelProperty("信噪比") + @TableField("SINR") + private String sinr; + + @ApiModelProperty("采集时间") + @TableField("UPTIME") + private Date uptime; + + @ApiModelProperty("上传时间") + @TableField("LOGTIME") + private Date logtime; + + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态,0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java index 86077b8..f4d4417 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java @@ -76,4 +76,17 @@ private Date logtime; + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态:0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java new file mode 100644 index 0000000..842ca0b --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.data.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.data.entity.DataGasOther; + +/** + *

+ * 外协管盯 服务类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +public interface IDataGasOtherService extends IService { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java new file mode 100644 index 0000000..4c660e9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java @@ -0,0 +1,226 @@ +package com.casic.missiles.modular.data.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.enums.DeviceTypeEnum; +import com.casic.missiles.enums.DictEnum; +import com.casic.missiles.modular.alarm.dto.AlarmDeviceRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.AlarmRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.BusAlarmLedgerDTO; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.data.dao.DataGasMapper; +import com.casic.missiles.modular.data.dao.DataGasOtherMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import com.casic.missiles.modular.data.entity.DataTubeOther; +import com.casic.missiles.modular.data.service.IDataAbstractService; +import com.casic.missiles.modular.data.service.IDataGasOtherService; +import com.casic.missiles.modular.data.service.ITrackLogService; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Optional; + +/** + *

+ * 外协管盯 服务实现类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RequiredArgsConstructor +@Service +public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { + + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + private final DataGasMapper dataGasMapper; + private final IAlarmRecordsService alarmRecordsService; + private final IAlarmRuleService alarmRuleService; + private final ITrackLogService iTrackLogService; + private final IBusDeviceService busDeviceService; + + @Override + public void process(String dataContent) { + + //解析数据+根据业务处理存储数据 + JSONObject json = JSONObject.parseObject(dataContent); + String devCode = json.get("devCode").toString(); + JSONObject jsonObject = json.getJSONObject("mBody"); + if (mType[0].equals(json.get("mType")) || mType[3].equals(json.get("mType"))) {//存储上报数据 + this.processNormalData(jsonObject, devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + this.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.TubeOther.name().equals(json.get("devType"))) { + if ("TubeOtherConfigSuccess".equals(jsonObject.get("bType"))) { +// deviceConfigManager.updateStatus(devCode); + } + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } else if (mType[4].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); +// imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; + try { + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); + } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + } + } + + @Transactional + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.getString("cell"); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = jsonObject.getJSONArray("datas"); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + String bfcf = busDeviceService.getBfcf(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).getString("gasval"); + String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); + String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); + String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataGasOther.builder() + .wellCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .wellNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .devcode(devCode) +// .cell(cell) + .gasval(gas) + .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime))) + .logtime(new Date()) + .vbat(vbat) + .batsta(batsta) + .rsrp(rsrp) + .sin(pci) + .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) + .build());//存储采集数据 + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) continue; + + //3.清除设备告警 + alarmRecordsService.cancelDeviceAlarm(devCode); + //4.存报警 + //若没绑定井,则不产生报警 + boolean alarmFlag = false; + if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { + //获取报警规则 + List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); + for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { + if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && + Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { + alarmFlag = true; + //写入报警 + //1、判断报警是否已存在 + if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.TubeOther.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); + //7.更新管线状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java index d248540..b33a1ee 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java @@ -91,7 +91,6 @@ } - public List getBusAlarmLedgerList(String devCode) { return this.dataGasMapper.getListByDevCode(devCode); } @@ -113,6 +112,13 @@ for (int i = 0; i < jsonArray.size(); i++) { try { String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) .findFirst(); @@ -175,18 +181,18 @@ alarmRecordsService.cancelDeviceAlarm(devCode); //4.存报警 //若没绑定井,则不产生报警 - boolean alarmFlag = false; + boolean alarmFlag = false; if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { //获取报警规则 List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { - alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); } break; } @@ -197,7 +203,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及设备状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新监测井状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java new file mode 100644 index 0000000..fc881a1 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.data.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 外协管盯 前端控制器 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RestController +@RequestMapping("/system/dataGasOther") +public class DataGasOtherController { + +} + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java new file mode 100644 index 0000000..b5f3627 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.data.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 外协管盯 Mapper 接口 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Mapper +public interface DataGasOtherMapper extends BaseMapper { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml new file mode 100644 index 0000000..8ce1455 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID, DEVCODE, WELL_CODE, WELL_NUMBER, GASVAL, VBAT, BATSTA, SIN, RSRP, SINR, UPTIME, LOGTIME, SIG, TEMP, SS_STATE + + + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java new file mode 100644 index 0000000..53972ba --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java @@ -0,0 +1,94 @@ +package com.casic.missiles.modular.data.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 外协管盯 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Builder +@Data +@TableName("data_gas_other") +@ApiModel(value = "DataGasOther对象", description = "外协管盯") +public class DataGasOther implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId("ID") + private Long id; + + @ApiModelProperty("设备编号") + @TableField("DEVCODE") + private String devcode; + + @ApiModelProperty("点位编号") + @TableField("WELL_CODE") + private String wellCode; + + @ApiModelProperty("位号") + @TableField("WELL_NUMBER") + private String wellNumber; + + @ApiModelProperty("气体浓度采样值") + @TableField("GASVAL") + private String gasval; + + @ApiModelProperty("设备电池电压值(毫伏)") + @TableField("VBAT") + private String vbat; + + @ApiModelProperty("电池状态0 正常、 1 低电告警、2 关机") + @TableField("BATSTA") + private String batsta; + + @ApiModelProperty("接收信号强度等级") + @TableField("SIN") + private String sin; + + @ApiModelProperty("接收信号参考质量 服务小 区的 RSRP 值") + @TableField("RSRP") + private String rsrp; + + @ApiModelProperty("信噪比") + @TableField("SINR") + private String sinr; + + @ApiModelProperty("采集时间") + @TableField("UPTIME") + private Date uptime; + + @ApiModelProperty("上传时间") + @TableField("LOGTIME") + private Date logtime; + + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态,0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java index 86077b8..f4d4417 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java @@ -76,4 +76,17 @@ private Date logtime; + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态:0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java new file mode 100644 index 0000000..842ca0b --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.data.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.data.entity.DataGasOther; + +/** + *

+ * 外协管盯 服务类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +public interface IDataGasOtherService extends IService { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java new file mode 100644 index 0000000..4c660e9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java @@ -0,0 +1,226 @@ +package com.casic.missiles.modular.data.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.enums.DeviceTypeEnum; +import com.casic.missiles.enums.DictEnum; +import com.casic.missiles.modular.alarm.dto.AlarmDeviceRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.AlarmRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.BusAlarmLedgerDTO; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.data.dao.DataGasMapper; +import com.casic.missiles.modular.data.dao.DataGasOtherMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import com.casic.missiles.modular.data.entity.DataTubeOther; +import com.casic.missiles.modular.data.service.IDataAbstractService; +import com.casic.missiles.modular.data.service.IDataGasOtherService; +import com.casic.missiles.modular.data.service.ITrackLogService; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Optional; + +/** + *

+ * 外协管盯 服务实现类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RequiredArgsConstructor +@Service +public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { + + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + private final DataGasMapper dataGasMapper; + private final IAlarmRecordsService alarmRecordsService; + private final IAlarmRuleService alarmRuleService; + private final ITrackLogService iTrackLogService; + private final IBusDeviceService busDeviceService; + + @Override + public void process(String dataContent) { + + //解析数据+根据业务处理存储数据 + JSONObject json = JSONObject.parseObject(dataContent); + String devCode = json.get("devCode").toString(); + JSONObject jsonObject = json.getJSONObject("mBody"); + if (mType[0].equals(json.get("mType")) || mType[3].equals(json.get("mType"))) {//存储上报数据 + this.processNormalData(jsonObject, devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + this.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.TubeOther.name().equals(json.get("devType"))) { + if ("TubeOtherConfigSuccess".equals(jsonObject.get("bType"))) { +// deviceConfigManager.updateStatus(devCode); + } + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } else if (mType[4].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); +// imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; + try { + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); + } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + } + } + + @Transactional + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.getString("cell"); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = jsonObject.getJSONArray("datas"); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + String bfcf = busDeviceService.getBfcf(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).getString("gasval"); + String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); + String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); + String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataGasOther.builder() + .wellCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .wellNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .devcode(devCode) +// .cell(cell) + .gasval(gas) + .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime))) + .logtime(new Date()) + .vbat(vbat) + .batsta(batsta) + .rsrp(rsrp) + .sin(pci) + .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) + .build());//存储采集数据 + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) continue; + + //3.清除设备告警 + alarmRecordsService.cancelDeviceAlarm(devCode); + //4.存报警 + //若没绑定井,则不产生报警 + boolean alarmFlag = false; + if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { + //获取报警规则 + List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); + for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { + if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && + Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { + alarmFlag = true; + //写入报警 + //1、判断报警是否已存在 + if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.TubeOther.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); + //7.更新管线状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java index d248540..b33a1ee 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java @@ -91,7 +91,6 @@ } - public List getBusAlarmLedgerList(String devCode) { return this.dataGasMapper.getListByDevCode(devCode); } @@ -113,6 +112,13 @@ for (int i = 0; i < jsonArray.size(); i++) { try { String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) .findFirst(); @@ -175,18 +181,18 @@ alarmRecordsService.cancelDeviceAlarm(devCode); //4.存报警 //若没绑定井,则不产生报警 - boolean alarmFlag = false; + boolean alarmFlag = false; if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { //获取报警规则 List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { - alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); } break; } @@ -197,7 +203,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及设备状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新监测井状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java index e848fce..6297093 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java @@ -84,42 +84,78 @@ } - @Transactional - public void processAlarmData(JSONObject jsonObject, String devCode) { - JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + public void processEventAlarm(String devCode, String eventTypeCode, String logTime, String eventValue) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - //获取报警事件 - List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - - List busWellDTOList = dataGasMapper.getListByDevCode(devCode); - //若没绑定井,则不产生报警 - if (busWellDTOList != null && busWellDTOList.size() > 0) { - - for (int i = 0; i < jsonArray.size(); i++) { + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + //特殊处理消警 + if ("0".equals(eventValue)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, eventTypeCode); + } + return; } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> eventTypeCode.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 - if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + if (!alarmDeviceRuleResponseDTO.isPresent()) return; //1.查询是否已存在该类报警 - if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) return; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); - - + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + } + } + } + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + try { + String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmEventCode)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } } } } @@ -169,7 +205,76 @@ .rightVibrateAlarm(VibR) .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(uptime))) .logtime(new Date()) - .build());//存储采集数据 + .build()); + + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + ruleResponseDTOList.forEach(ruleResponseDTO -> { + + if ("Sloping".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Sloping)&&(!alarmRecordsService.isWatchAlarms(devCode,"Sloping"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Sloping", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Sloping)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Sloping"); + + } + } + if ("Destroy".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Destroy)&&(!alarmRecordsService.isWatchAlarms(devCode,"Destroy"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Destroy", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Destroy)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Destroy"); + + } + } + if ("Leak".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Leak)&&(!alarmRecordsService.isWatchAlarms(devCode,"Leak"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Leak", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Leak)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Leak"); + + } + } + if ("DiscL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscL)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscL"); + + } + } + if ("DiscR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscR)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscR"); + } + } + + if ("VibL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibL)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibL"); + } + } + if ("VibR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibR)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibR"); + } + } + }); + +// //处理报警事件 +// processEventAlarm(devCode,"Sloping",uptime,Sloping); +// processEventAlarm(devCode,"Destroy",uptime,Destroy); +// processEventAlarm(devCode,"Leak",uptime,Leak); +// processEventAlarm(devCode,"DiscL",uptime,DiscL); +// processEventAlarm(devCode,"DiscR",uptime,DiscR); +// processEventAlarm(devCode,"VibL",uptime,VibL); +// processEventAlarm(devCode,"VibR",uptime,VibR); + //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -197,7 +302,7 @@ if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && gas >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), gas)) { @@ -213,7 +318,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R,alarmFlag?"燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R, alarmFlag ? "燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java new file mode 100644 index 0000000..fc881a1 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.data.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 外协管盯 前端控制器 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RestController +@RequestMapping("/system/dataGasOther") +public class DataGasOtherController { + +} + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java new file mode 100644 index 0000000..b5f3627 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.data.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 外协管盯 Mapper 接口 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Mapper +public interface DataGasOtherMapper extends BaseMapper { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml new file mode 100644 index 0000000..8ce1455 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID, DEVCODE, WELL_CODE, WELL_NUMBER, GASVAL, VBAT, BATSTA, SIN, RSRP, SINR, UPTIME, LOGTIME, SIG, TEMP, SS_STATE + + + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java new file mode 100644 index 0000000..53972ba --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java @@ -0,0 +1,94 @@ +package com.casic.missiles.modular.data.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 外协管盯 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Builder +@Data +@TableName("data_gas_other") +@ApiModel(value = "DataGasOther对象", description = "外协管盯") +public class DataGasOther implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId("ID") + private Long id; + + @ApiModelProperty("设备编号") + @TableField("DEVCODE") + private String devcode; + + @ApiModelProperty("点位编号") + @TableField("WELL_CODE") + private String wellCode; + + @ApiModelProperty("位号") + @TableField("WELL_NUMBER") + private String wellNumber; + + @ApiModelProperty("气体浓度采样值") + @TableField("GASVAL") + private String gasval; + + @ApiModelProperty("设备电池电压值(毫伏)") + @TableField("VBAT") + private String vbat; + + @ApiModelProperty("电池状态0 正常、 1 低电告警、2 关机") + @TableField("BATSTA") + private String batsta; + + @ApiModelProperty("接收信号强度等级") + @TableField("SIN") + private String sin; + + @ApiModelProperty("接收信号参考质量 服务小 区的 RSRP 值") + @TableField("RSRP") + private String rsrp; + + @ApiModelProperty("信噪比") + @TableField("SINR") + private String sinr; + + @ApiModelProperty("采集时间") + @TableField("UPTIME") + private Date uptime; + + @ApiModelProperty("上传时间") + @TableField("LOGTIME") + private Date logtime; + + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态,0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java index 86077b8..f4d4417 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java @@ -76,4 +76,17 @@ private Date logtime; + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态:0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java new file mode 100644 index 0000000..842ca0b --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.data.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.data.entity.DataGasOther; + +/** + *

+ * 外协管盯 服务类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +public interface IDataGasOtherService extends IService { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java new file mode 100644 index 0000000..4c660e9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java @@ -0,0 +1,226 @@ +package com.casic.missiles.modular.data.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.enums.DeviceTypeEnum; +import com.casic.missiles.enums.DictEnum; +import com.casic.missiles.modular.alarm.dto.AlarmDeviceRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.AlarmRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.BusAlarmLedgerDTO; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.data.dao.DataGasMapper; +import com.casic.missiles.modular.data.dao.DataGasOtherMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import com.casic.missiles.modular.data.entity.DataTubeOther; +import com.casic.missiles.modular.data.service.IDataAbstractService; +import com.casic.missiles.modular.data.service.IDataGasOtherService; +import com.casic.missiles.modular.data.service.ITrackLogService; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Optional; + +/** + *

+ * 外协管盯 服务实现类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RequiredArgsConstructor +@Service +public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { + + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + private final DataGasMapper dataGasMapper; + private final IAlarmRecordsService alarmRecordsService; + private final IAlarmRuleService alarmRuleService; + private final ITrackLogService iTrackLogService; + private final IBusDeviceService busDeviceService; + + @Override + public void process(String dataContent) { + + //解析数据+根据业务处理存储数据 + JSONObject json = JSONObject.parseObject(dataContent); + String devCode = json.get("devCode").toString(); + JSONObject jsonObject = json.getJSONObject("mBody"); + if (mType[0].equals(json.get("mType")) || mType[3].equals(json.get("mType"))) {//存储上报数据 + this.processNormalData(jsonObject, devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + this.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.TubeOther.name().equals(json.get("devType"))) { + if ("TubeOtherConfigSuccess".equals(jsonObject.get("bType"))) { +// deviceConfigManager.updateStatus(devCode); + } + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } else if (mType[4].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); +// imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; + try { + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); + } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + } + } + + @Transactional + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.getString("cell"); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = jsonObject.getJSONArray("datas"); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + String bfcf = busDeviceService.getBfcf(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).getString("gasval"); + String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); + String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); + String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataGasOther.builder() + .wellCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .wellNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .devcode(devCode) +// .cell(cell) + .gasval(gas) + .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime))) + .logtime(new Date()) + .vbat(vbat) + .batsta(batsta) + .rsrp(rsrp) + .sin(pci) + .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) + .build());//存储采集数据 + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) continue; + + //3.清除设备告警 + alarmRecordsService.cancelDeviceAlarm(devCode); + //4.存报警 + //若没绑定井,则不产生报警 + boolean alarmFlag = false; + if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { + //获取报警规则 + List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); + for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { + if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && + Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { + alarmFlag = true; + //写入报警 + //1、判断报警是否已存在 + if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.TubeOther.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); + //7.更新管线状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java index d248540..b33a1ee 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java @@ -91,7 +91,6 @@ } - public List getBusAlarmLedgerList(String devCode) { return this.dataGasMapper.getListByDevCode(devCode); } @@ -113,6 +112,13 @@ for (int i = 0; i < jsonArray.size(); i++) { try { String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) .findFirst(); @@ -175,18 +181,18 @@ alarmRecordsService.cancelDeviceAlarm(devCode); //4.存报警 //若没绑定井,则不产生报警 - boolean alarmFlag = false; + boolean alarmFlag = false; if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { //获取报警规则 List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { - alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); } break; } @@ -197,7 +203,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及设备状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新监测井状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java index e848fce..6297093 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java @@ -84,42 +84,78 @@ } - @Transactional - public void processAlarmData(JSONObject jsonObject, String devCode) { - JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + public void processEventAlarm(String devCode, String eventTypeCode, String logTime, String eventValue) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - //获取报警事件 - List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - - List busWellDTOList = dataGasMapper.getListByDevCode(devCode); - //若没绑定井,则不产生报警 - if (busWellDTOList != null && busWellDTOList.size() > 0) { - - for (int i = 0; i < jsonArray.size(); i++) { + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + //特殊处理消警 + if ("0".equals(eventValue)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, eventTypeCode); + } + return; } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> eventTypeCode.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 - if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + if (!alarmDeviceRuleResponseDTO.isPresent()) return; //1.查询是否已存在该类报警 - if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) return; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); - - + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + } + } + } + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + try { + String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmEventCode)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } } } } @@ -169,7 +205,76 @@ .rightVibrateAlarm(VibR) .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(uptime))) .logtime(new Date()) - .build());//存储采集数据 + .build()); + + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + ruleResponseDTOList.forEach(ruleResponseDTO -> { + + if ("Sloping".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Sloping)&&(!alarmRecordsService.isWatchAlarms(devCode,"Sloping"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Sloping", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Sloping)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Sloping"); + + } + } + if ("Destroy".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Destroy)&&(!alarmRecordsService.isWatchAlarms(devCode,"Destroy"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Destroy", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Destroy)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Destroy"); + + } + } + if ("Leak".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Leak)&&(!alarmRecordsService.isWatchAlarms(devCode,"Leak"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Leak", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Leak)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Leak"); + + } + } + if ("DiscL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscL)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscL"); + + } + } + if ("DiscR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscR)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscR"); + } + } + + if ("VibL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibL)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibL"); + } + } + if ("VibR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibR)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibR"); + } + } + }); + +// //处理报警事件 +// processEventAlarm(devCode,"Sloping",uptime,Sloping); +// processEventAlarm(devCode,"Destroy",uptime,Destroy); +// processEventAlarm(devCode,"Leak",uptime,Leak); +// processEventAlarm(devCode,"DiscL",uptime,DiscL); +// processEventAlarm(devCode,"DiscR",uptime,DiscR); +// processEventAlarm(devCode,"VibL",uptime,VibL); +// processEventAlarm(devCode,"VibR",uptime,VibR); + //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -197,7 +302,7 @@ if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && gas >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), gas)) { @@ -213,7 +318,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R,alarmFlag?"燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R, alarmFlag ? "燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java index f913775..895d201 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java @@ -89,6 +89,7 @@ String bfcf = busDeviceService.getBfcf(devCode); if (DictEnum.BF_ON.equals(bfcf)) { JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); //获取报警事件 List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); List busWellDTOList = dataGasMapper.getListByDevCode(devCode); @@ -96,25 +97,43 @@ if (busWellDTOList != null && busWellDTOList.size() > 0) { for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 if (!alarmDeviceRuleResponseDTO.isPresent()) continue; //1.查询是否已存在该类报警 if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { @@ -141,6 +160,9 @@ String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); gas = String.format("%.2f", Double.valueOf(gas)); //1.存数据 save(DataTubeOther.builder() @@ -156,6 +178,9 @@ .rsrp(rsrp) .sin(pci) .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) .build());//存储采集数据 //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -186,7 +211,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java new file mode 100644 index 0000000..fc881a1 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.data.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 外协管盯 前端控制器 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RestController +@RequestMapping("/system/dataGasOther") +public class DataGasOtherController { + +} + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java new file mode 100644 index 0000000..b5f3627 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.data.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 外协管盯 Mapper 接口 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Mapper +public interface DataGasOtherMapper extends BaseMapper { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml new file mode 100644 index 0000000..8ce1455 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID, DEVCODE, WELL_CODE, WELL_NUMBER, GASVAL, VBAT, BATSTA, SIN, RSRP, SINR, UPTIME, LOGTIME, SIG, TEMP, SS_STATE + + + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java new file mode 100644 index 0000000..53972ba --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java @@ -0,0 +1,94 @@ +package com.casic.missiles.modular.data.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 外协管盯 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Builder +@Data +@TableName("data_gas_other") +@ApiModel(value = "DataGasOther对象", description = "外协管盯") +public class DataGasOther implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId("ID") + private Long id; + + @ApiModelProperty("设备编号") + @TableField("DEVCODE") + private String devcode; + + @ApiModelProperty("点位编号") + @TableField("WELL_CODE") + private String wellCode; + + @ApiModelProperty("位号") + @TableField("WELL_NUMBER") + private String wellNumber; + + @ApiModelProperty("气体浓度采样值") + @TableField("GASVAL") + private String gasval; + + @ApiModelProperty("设备电池电压值(毫伏)") + @TableField("VBAT") + private String vbat; + + @ApiModelProperty("电池状态0 正常、 1 低电告警、2 关机") + @TableField("BATSTA") + private String batsta; + + @ApiModelProperty("接收信号强度等级") + @TableField("SIN") + private String sin; + + @ApiModelProperty("接收信号参考质量 服务小 区的 RSRP 值") + @TableField("RSRP") + private String rsrp; + + @ApiModelProperty("信噪比") + @TableField("SINR") + private String sinr; + + @ApiModelProperty("采集时间") + @TableField("UPTIME") + private Date uptime; + + @ApiModelProperty("上传时间") + @TableField("LOGTIME") + private Date logtime; + + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态,0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java index 86077b8..f4d4417 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java @@ -76,4 +76,17 @@ private Date logtime; + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态:0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java new file mode 100644 index 0000000..842ca0b --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.data.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.data.entity.DataGasOther; + +/** + *

+ * 外协管盯 服务类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +public interface IDataGasOtherService extends IService { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java new file mode 100644 index 0000000..4c660e9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java @@ -0,0 +1,226 @@ +package com.casic.missiles.modular.data.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.enums.DeviceTypeEnum; +import com.casic.missiles.enums.DictEnum; +import com.casic.missiles.modular.alarm.dto.AlarmDeviceRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.AlarmRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.BusAlarmLedgerDTO; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.data.dao.DataGasMapper; +import com.casic.missiles.modular.data.dao.DataGasOtherMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import com.casic.missiles.modular.data.entity.DataTubeOther; +import com.casic.missiles.modular.data.service.IDataAbstractService; +import com.casic.missiles.modular.data.service.IDataGasOtherService; +import com.casic.missiles.modular.data.service.ITrackLogService; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Optional; + +/** + *

+ * 外协管盯 服务实现类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RequiredArgsConstructor +@Service +public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { + + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + private final DataGasMapper dataGasMapper; + private final IAlarmRecordsService alarmRecordsService; + private final IAlarmRuleService alarmRuleService; + private final ITrackLogService iTrackLogService; + private final IBusDeviceService busDeviceService; + + @Override + public void process(String dataContent) { + + //解析数据+根据业务处理存储数据 + JSONObject json = JSONObject.parseObject(dataContent); + String devCode = json.get("devCode").toString(); + JSONObject jsonObject = json.getJSONObject("mBody"); + if (mType[0].equals(json.get("mType")) || mType[3].equals(json.get("mType"))) {//存储上报数据 + this.processNormalData(jsonObject, devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + this.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.TubeOther.name().equals(json.get("devType"))) { + if ("TubeOtherConfigSuccess".equals(jsonObject.get("bType"))) { +// deviceConfigManager.updateStatus(devCode); + } + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } else if (mType[4].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); +// imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; + try { + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); + } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + } + } + + @Transactional + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.getString("cell"); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = jsonObject.getJSONArray("datas"); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + String bfcf = busDeviceService.getBfcf(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).getString("gasval"); + String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); + String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); + String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataGasOther.builder() + .wellCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .wellNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .devcode(devCode) +// .cell(cell) + .gasval(gas) + .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime))) + .logtime(new Date()) + .vbat(vbat) + .batsta(batsta) + .rsrp(rsrp) + .sin(pci) + .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) + .build());//存储采集数据 + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) continue; + + //3.清除设备告警 + alarmRecordsService.cancelDeviceAlarm(devCode); + //4.存报警 + //若没绑定井,则不产生报警 + boolean alarmFlag = false; + if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { + //获取报警规则 + List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); + for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { + if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && + Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { + alarmFlag = true; + //写入报警 + //1、判断报警是否已存在 + if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.TubeOther.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); + //7.更新管线状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java index d248540..b33a1ee 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java @@ -91,7 +91,6 @@ } - public List getBusAlarmLedgerList(String devCode) { return this.dataGasMapper.getListByDevCode(devCode); } @@ -113,6 +112,13 @@ for (int i = 0; i < jsonArray.size(); i++) { try { String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) .findFirst(); @@ -175,18 +181,18 @@ alarmRecordsService.cancelDeviceAlarm(devCode); //4.存报警 //若没绑定井,则不产生报警 - boolean alarmFlag = false; + boolean alarmFlag = false; if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { //获取报警规则 List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { - alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); } break; } @@ -197,7 +203,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及设备状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新监测井状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java index e848fce..6297093 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java @@ -84,42 +84,78 @@ } - @Transactional - public void processAlarmData(JSONObject jsonObject, String devCode) { - JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + public void processEventAlarm(String devCode, String eventTypeCode, String logTime, String eventValue) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - //获取报警事件 - List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - - List busWellDTOList = dataGasMapper.getListByDevCode(devCode); - //若没绑定井,则不产生报警 - if (busWellDTOList != null && busWellDTOList.size() > 0) { - - for (int i = 0; i < jsonArray.size(); i++) { + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + //特殊处理消警 + if ("0".equals(eventValue)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, eventTypeCode); + } + return; } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> eventTypeCode.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 - if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + if (!alarmDeviceRuleResponseDTO.isPresent()) return; //1.查询是否已存在该类报警 - if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) return; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); - - + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + } + } + } + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + try { + String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmEventCode)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } } } } @@ -169,7 +205,76 @@ .rightVibrateAlarm(VibR) .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(uptime))) .logtime(new Date()) - .build());//存储采集数据 + .build()); + + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + ruleResponseDTOList.forEach(ruleResponseDTO -> { + + if ("Sloping".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Sloping)&&(!alarmRecordsService.isWatchAlarms(devCode,"Sloping"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Sloping", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Sloping)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Sloping"); + + } + } + if ("Destroy".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Destroy)&&(!alarmRecordsService.isWatchAlarms(devCode,"Destroy"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Destroy", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Destroy)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Destroy"); + + } + } + if ("Leak".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Leak)&&(!alarmRecordsService.isWatchAlarms(devCode,"Leak"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Leak", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Leak)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Leak"); + + } + } + if ("DiscL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscL)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscL"); + + } + } + if ("DiscR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscR)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscR"); + } + } + + if ("VibL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibL)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibL"); + } + } + if ("VibR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibR)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibR"); + } + } + }); + +// //处理报警事件 +// processEventAlarm(devCode,"Sloping",uptime,Sloping); +// processEventAlarm(devCode,"Destroy",uptime,Destroy); +// processEventAlarm(devCode,"Leak",uptime,Leak); +// processEventAlarm(devCode,"DiscL",uptime,DiscL); +// processEventAlarm(devCode,"DiscR",uptime,DiscR); +// processEventAlarm(devCode,"VibL",uptime,VibL); +// processEventAlarm(devCode,"VibR",uptime,VibR); + //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -197,7 +302,7 @@ if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && gas >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), gas)) { @@ -213,7 +318,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R,alarmFlag?"燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R, alarmFlag ? "燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java index f913775..895d201 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java @@ -89,6 +89,7 @@ String bfcf = busDeviceService.getBfcf(devCode); if (DictEnum.BF_ON.equals(bfcf)) { JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); //获取报警事件 List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); List busWellDTOList = dataGasMapper.getListByDevCode(devCode); @@ -96,25 +97,43 @@ if (busWellDTOList != null && busWellDTOList.size() > 0) { for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 if (!alarmDeviceRuleResponseDTO.isPresent()) continue; //1.查询是否已存在该类报警 if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { @@ -141,6 +160,9 @@ String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); gas = String.format("%.2f", Double.valueOf(gas)); //1.存数据 save(DataTubeOther.builder() @@ -156,6 +178,9 @@ .rsrp(rsrp) .sin(pci) .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) .build());//存储采集数据 //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -186,7 +211,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 98e736b..2288075 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -216,5 +216,15 @@ public ReturnDTO syncDeviceStatus() { return ReturnUtil.success(iBusDeviceService.syncDeviceStatus()); } + + @ApiOperation("根据闸井id获取设备信息") + @PostMapping("/getListByWellId") + @ResponseBody + public ReturnDTO getListByWellId(@RequestBody IdDTO idDTO) { + Assert.isFalse(ObjectUtil.isEmpty(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iBusDeviceService.getListByWellId(idDTO.getId())); + } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java new file mode 100644 index 0000000..fc881a1 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.data.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 外协管盯 前端控制器 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RestController +@RequestMapping("/system/dataGasOther") +public class DataGasOtherController { + +} + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java new file mode 100644 index 0000000..b5f3627 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.data.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 外协管盯 Mapper 接口 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Mapper +public interface DataGasOtherMapper extends BaseMapper { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml new file mode 100644 index 0000000..8ce1455 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID, DEVCODE, WELL_CODE, WELL_NUMBER, GASVAL, VBAT, BATSTA, SIN, RSRP, SINR, UPTIME, LOGTIME, SIG, TEMP, SS_STATE + + + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java new file mode 100644 index 0000000..53972ba --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java @@ -0,0 +1,94 @@ +package com.casic.missiles.modular.data.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 外协管盯 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Builder +@Data +@TableName("data_gas_other") +@ApiModel(value = "DataGasOther对象", description = "外协管盯") +public class DataGasOther implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId("ID") + private Long id; + + @ApiModelProperty("设备编号") + @TableField("DEVCODE") + private String devcode; + + @ApiModelProperty("点位编号") + @TableField("WELL_CODE") + private String wellCode; + + @ApiModelProperty("位号") + @TableField("WELL_NUMBER") + private String wellNumber; + + @ApiModelProperty("气体浓度采样值") + @TableField("GASVAL") + private String gasval; + + @ApiModelProperty("设备电池电压值(毫伏)") + @TableField("VBAT") + private String vbat; + + @ApiModelProperty("电池状态0 正常、 1 低电告警、2 关机") + @TableField("BATSTA") + private String batsta; + + @ApiModelProperty("接收信号强度等级") + @TableField("SIN") + private String sin; + + @ApiModelProperty("接收信号参考质量 服务小 区的 RSRP 值") + @TableField("RSRP") + private String rsrp; + + @ApiModelProperty("信噪比") + @TableField("SINR") + private String sinr; + + @ApiModelProperty("采集时间") + @TableField("UPTIME") + private Date uptime; + + @ApiModelProperty("上传时间") + @TableField("LOGTIME") + private Date logtime; + + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态,0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java index 86077b8..f4d4417 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java @@ -76,4 +76,17 @@ private Date logtime; + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态:0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java new file mode 100644 index 0000000..842ca0b --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.data.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.data.entity.DataGasOther; + +/** + *

+ * 外协管盯 服务类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +public interface IDataGasOtherService extends IService { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java new file mode 100644 index 0000000..4c660e9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java @@ -0,0 +1,226 @@ +package com.casic.missiles.modular.data.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.enums.DeviceTypeEnum; +import com.casic.missiles.enums.DictEnum; +import com.casic.missiles.modular.alarm.dto.AlarmDeviceRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.AlarmRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.BusAlarmLedgerDTO; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.data.dao.DataGasMapper; +import com.casic.missiles.modular.data.dao.DataGasOtherMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import com.casic.missiles.modular.data.entity.DataTubeOther; +import com.casic.missiles.modular.data.service.IDataAbstractService; +import com.casic.missiles.modular.data.service.IDataGasOtherService; +import com.casic.missiles.modular.data.service.ITrackLogService; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Optional; + +/** + *

+ * 外协管盯 服务实现类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RequiredArgsConstructor +@Service +public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { + + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + private final DataGasMapper dataGasMapper; + private final IAlarmRecordsService alarmRecordsService; + private final IAlarmRuleService alarmRuleService; + private final ITrackLogService iTrackLogService; + private final IBusDeviceService busDeviceService; + + @Override + public void process(String dataContent) { + + //解析数据+根据业务处理存储数据 + JSONObject json = JSONObject.parseObject(dataContent); + String devCode = json.get("devCode").toString(); + JSONObject jsonObject = json.getJSONObject("mBody"); + if (mType[0].equals(json.get("mType")) || mType[3].equals(json.get("mType"))) {//存储上报数据 + this.processNormalData(jsonObject, devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + this.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.TubeOther.name().equals(json.get("devType"))) { + if ("TubeOtherConfigSuccess".equals(jsonObject.get("bType"))) { +// deviceConfigManager.updateStatus(devCode); + } + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } else if (mType[4].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); +// imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; + try { + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); + } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + } + } + + @Transactional + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.getString("cell"); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = jsonObject.getJSONArray("datas"); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + String bfcf = busDeviceService.getBfcf(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).getString("gasval"); + String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); + String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); + String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataGasOther.builder() + .wellCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .wellNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .devcode(devCode) +// .cell(cell) + .gasval(gas) + .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime))) + .logtime(new Date()) + .vbat(vbat) + .batsta(batsta) + .rsrp(rsrp) + .sin(pci) + .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) + .build());//存储采集数据 + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) continue; + + //3.清除设备告警 + alarmRecordsService.cancelDeviceAlarm(devCode); + //4.存报警 + //若没绑定井,则不产生报警 + boolean alarmFlag = false; + if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { + //获取报警规则 + List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); + for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { + if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && + Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { + alarmFlag = true; + //写入报警 + //1、判断报警是否已存在 + if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.TubeOther.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); + //7.更新管线状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java index d248540..b33a1ee 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java @@ -91,7 +91,6 @@ } - public List getBusAlarmLedgerList(String devCode) { return this.dataGasMapper.getListByDevCode(devCode); } @@ -113,6 +112,13 @@ for (int i = 0; i < jsonArray.size(); i++) { try { String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) .findFirst(); @@ -175,18 +181,18 @@ alarmRecordsService.cancelDeviceAlarm(devCode); //4.存报警 //若没绑定井,则不产生报警 - boolean alarmFlag = false; + boolean alarmFlag = false; if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { //获取报警规则 List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { - alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); } break; } @@ -197,7 +203,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及设备状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新监测井状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java index e848fce..6297093 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java @@ -84,42 +84,78 @@ } - @Transactional - public void processAlarmData(JSONObject jsonObject, String devCode) { - JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + public void processEventAlarm(String devCode, String eventTypeCode, String logTime, String eventValue) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - //获取报警事件 - List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - - List busWellDTOList = dataGasMapper.getListByDevCode(devCode); - //若没绑定井,则不产生报警 - if (busWellDTOList != null && busWellDTOList.size() > 0) { - - for (int i = 0; i < jsonArray.size(); i++) { + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + //特殊处理消警 + if ("0".equals(eventValue)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, eventTypeCode); + } + return; } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> eventTypeCode.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 - if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + if (!alarmDeviceRuleResponseDTO.isPresent()) return; //1.查询是否已存在该类报警 - if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) return; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); - - + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + } + } + } + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + try { + String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmEventCode)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } } } } @@ -169,7 +205,76 @@ .rightVibrateAlarm(VibR) .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(uptime))) .logtime(new Date()) - .build());//存储采集数据 + .build()); + + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + ruleResponseDTOList.forEach(ruleResponseDTO -> { + + if ("Sloping".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Sloping)&&(!alarmRecordsService.isWatchAlarms(devCode,"Sloping"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Sloping", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Sloping)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Sloping"); + + } + } + if ("Destroy".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Destroy)&&(!alarmRecordsService.isWatchAlarms(devCode,"Destroy"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Destroy", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Destroy)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Destroy"); + + } + } + if ("Leak".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Leak)&&(!alarmRecordsService.isWatchAlarms(devCode,"Leak"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Leak", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Leak)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Leak"); + + } + } + if ("DiscL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscL)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscL"); + + } + } + if ("DiscR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscR)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscR"); + } + } + + if ("VibL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibL)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibL"); + } + } + if ("VibR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibR)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibR"); + } + } + }); + +// //处理报警事件 +// processEventAlarm(devCode,"Sloping",uptime,Sloping); +// processEventAlarm(devCode,"Destroy",uptime,Destroy); +// processEventAlarm(devCode,"Leak",uptime,Leak); +// processEventAlarm(devCode,"DiscL",uptime,DiscL); +// processEventAlarm(devCode,"DiscR",uptime,DiscR); +// processEventAlarm(devCode,"VibL",uptime,VibL); +// processEventAlarm(devCode,"VibR",uptime,VibR); + //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -197,7 +302,7 @@ if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && gas >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), gas)) { @@ -213,7 +318,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R,alarmFlag?"燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R, alarmFlag ? "燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java index f913775..895d201 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java @@ -89,6 +89,7 @@ String bfcf = busDeviceService.getBfcf(devCode); if (DictEnum.BF_ON.equals(bfcf)) { JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); //获取报警事件 List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); List busWellDTOList = dataGasMapper.getListByDevCode(devCode); @@ -96,25 +97,43 @@ if (busWellDTOList != null && busWellDTOList.size() > 0) { for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 if (!alarmDeviceRuleResponseDTO.isPresent()) continue; //1.查询是否已存在该类报警 if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { @@ -141,6 +160,9 @@ String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); gas = String.format("%.2f", Double.valueOf(gas)); //1.存数据 save(DataTubeOther.builder() @@ -156,6 +178,9 @@ .rsrp(rsrp) .sin(pci) .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) .build());//存储采集数据 //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -186,7 +211,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 98e736b..2288075 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -216,5 +216,15 @@ public ReturnDTO syncDeviceStatus() { return ReturnUtil.success(iBusDeviceService.syncDeviceStatus()); } + + @ApiOperation("根据闸井id获取设备信息") + @PostMapping("/getListByWellId") + @ResponseBody + public ReturnDTO getListByWellId(@RequestBody IdDTO idDTO) { + Assert.isFalse(ObjectUtil.isEmpty(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iBusDeviceService.getListByWellId(idDTO.getId())); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java index 72a2d84..d6d9743 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java @@ -85,6 +85,7 @@ return ReturnUtil.success(iBusLedgerService.detail(idDTO.getId())); } + /** * 同步三级部门 * diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java new file mode 100644 index 0000000..fc881a1 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.data.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 外协管盯 前端控制器 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RestController +@RequestMapping("/system/dataGasOther") +public class DataGasOtherController { + +} + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java new file mode 100644 index 0000000..b5f3627 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.data.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 外协管盯 Mapper 接口 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Mapper +public interface DataGasOtherMapper extends BaseMapper { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml new file mode 100644 index 0000000..8ce1455 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID, DEVCODE, WELL_CODE, WELL_NUMBER, GASVAL, VBAT, BATSTA, SIN, RSRP, SINR, UPTIME, LOGTIME, SIG, TEMP, SS_STATE + + + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java new file mode 100644 index 0000000..53972ba --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java @@ -0,0 +1,94 @@ +package com.casic.missiles.modular.data.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 外协管盯 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Builder +@Data +@TableName("data_gas_other") +@ApiModel(value = "DataGasOther对象", description = "外协管盯") +public class DataGasOther implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId("ID") + private Long id; + + @ApiModelProperty("设备编号") + @TableField("DEVCODE") + private String devcode; + + @ApiModelProperty("点位编号") + @TableField("WELL_CODE") + private String wellCode; + + @ApiModelProperty("位号") + @TableField("WELL_NUMBER") + private String wellNumber; + + @ApiModelProperty("气体浓度采样值") + @TableField("GASVAL") + private String gasval; + + @ApiModelProperty("设备电池电压值(毫伏)") + @TableField("VBAT") + private String vbat; + + @ApiModelProperty("电池状态0 正常、 1 低电告警、2 关机") + @TableField("BATSTA") + private String batsta; + + @ApiModelProperty("接收信号强度等级") + @TableField("SIN") + private String sin; + + @ApiModelProperty("接收信号参考质量 服务小 区的 RSRP 值") + @TableField("RSRP") + private String rsrp; + + @ApiModelProperty("信噪比") + @TableField("SINR") + private String sinr; + + @ApiModelProperty("采集时间") + @TableField("UPTIME") + private Date uptime; + + @ApiModelProperty("上传时间") + @TableField("LOGTIME") + private Date logtime; + + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态,0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java index 86077b8..f4d4417 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java @@ -76,4 +76,17 @@ private Date logtime; + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态:0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java new file mode 100644 index 0000000..842ca0b --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.data.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.data.entity.DataGasOther; + +/** + *

+ * 外协管盯 服务类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +public interface IDataGasOtherService extends IService { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java new file mode 100644 index 0000000..4c660e9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java @@ -0,0 +1,226 @@ +package com.casic.missiles.modular.data.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.enums.DeviceTypeEnum; +import com.casic.missiles.enums.DictEnum; +import com.casic.missiles.modular.alarm.dto.AlarmDeviceRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.AlarmRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.BusAlarmLedgerDTO; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.data.dao.DataGasMapper; +import com.casic.missiles.modular.data.dao.DataGasOtherMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import com.casic.missiles.modular.data.entity.DataTubeOther; +import com.casic.missiles.modular.data.service.IDataAbstractService; +import com.casic.missiles.modular.data.service.IDataGasOtherService; +import com.casic.missiles.modular.data.service.ITrackLogService; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Optional; + +/** + *

+ * 外协管盯 服务实现类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RequiredArgsConstructor +@Service +public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { + + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + private final DataGasMapper dataGasMapper; + private final IAlarmRecordsService alarmRecordsService; + private final IAlarmRuleService alarmRuleService; + private final ITrackLogService iTrackLogService; + private final IBusDeviceService busDeviceService; + + @Override + public void process(String dataContent) { + + //解析数据+根据业务处理存储数据 + JSONObject json = JSONObject.parseObject(dataContent); + String devCode = json.get("devCode").toString(); + JSONObject jsonObject = json.getJSONObject("mBody"); + if (mType[0].equals(json.get("mType")) || mType[3].equals(json.get("mType"))) {//存储上报数据 + this.processNormalData(jsonObject, devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + this.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.TubeOther.name().equals(json.get("devType"))) { + if ("TubeOtherConfigSuccess".equals(jsonObject.get("bType"))) { +// deviceConfigManager.updateStatus(devCode); + } + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } else if (mType[4].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); +// imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; + try { + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); + } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + } + } + + @Transactional + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.getString("cell"); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = jsonObject.getJSONArray("datas"); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + String bfcf = busDeviceService.getBfcf(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).getString("gasval"); + String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); + String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); + String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataGasOther.builder() + .wellCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .wellNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .devcode(devCode) +// .cell(cell) + .gasval(gas) + .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime))) + .logtime(new Date()) + .vbat(vbat) + .batsta(batsta) + .rsrp(rsrp) + .sin(pci) + .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) + .build());//存储采集数据 + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) continue; + + //3.清除设备告警 + alarmRecordsService.cancelDeviceAlarm(devCode); + //4.存报警 + //若没绑定井,则不产生报警 + boolean alarmFlag = false; + if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { + //获取报警规则 + List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); + for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { + if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && + Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { + alarmFlag = true; + //写入报警 + //1、判断报警是否已存在 + if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.TubeOther.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); + //7.更新管线状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java index d248540..b33a1ee 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java @@ -91,7 +91,6 @@ } - public List getBusAlarmLedgerList(String devCode) { return this.dataGasMapper.getListByDevCode(devCode); } @@ -113,6 +112,13 @@ for (int i = 0; i < jsonArray.size(); i++) { try { String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) .findFirst(); @@ -175,18 +181,18 @@ alarmRecordsService.cancelDeviceAlarm(devCode); //4.存报警 //若没绑定井,则不产生报警 - boolean alarmFlag = false; + boolean alarmFlag = false; if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { //获取报警规则 List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { - alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); } break; } @@ -197,7 +203,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及设备状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新监测井状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java index e848fce..6297093 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java @@ -84,42 +84,78 @@ } - @Transactional - public void processAlarmData(JSONObject jsonObject, String devCode) { - JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + public void processEventAlarm(String devCode, String eventTypeCode, String logTime, String eventValue) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - //获取报警事件 - List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - - List busWellDTOList = dataGasMapper.getListByDevCode(devCode); - //若没绑定井,则不产生报警 - if (busWellDTOList != null && busWellDTOList.size() > 0) { - - for (int i = 0; i < jsonArray.size(); i++) { + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + //特殊处理消警 + if ("0".equals(eventValue)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, eventTypeCode); + } + return; } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> eventTypeCode.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 - if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + if (!alarmDeviceRuleResponseDTO.isPresent()) return; //1.查询是否已存在该类报警 - if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) return; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); - - + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + } + } + } + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + try { + String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmEventCode)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } } } } @@ -169,7 +205,76 @@ .rightVibrateAlarm(VibR) .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(uptime))) .logtime(new Date()) - .build());//存储采集数据 + .build()); + + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + ruleResponseDTOList.forEach(ruleResponseDTO -> { + + if ("Sloping".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Sloping)&&(!alarmRecordsService.isWatchAlarms(devCode,"Sloping"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Sloping", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Sloping)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Sloping"); + + } + } + if ("Destroy".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Destroy)&&(!alarmRecordsService.isWatchAlarms(devCode,"Destroy"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Destroy", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Destroy)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Destroy"); + + } + } + if ("Leak".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Leak)&&(!alarmRecordsService.isWatchAlarms(devCode,"Leak"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Leak", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Leak)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Leak"); + + } + } + if ("DiscL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscL)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscL"); + + } + } + if ("DiscR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscR)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscR"); + } + } + + if ("VibL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibL)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibL"); + } + } + if ("VibR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibR)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibR"); + } + } + }); + +// //处理报警事件 +// processEventAlarm(devCode,"Sloping",uptime,Sloping); +// processEventAlarm(devCode,"Destroy",uptime,Destroy); +// processEventAlarm(devCode,"Leak",uptime,Leak); +// processEventAlarm(devCode,"DiscL",uptime,DiscL); +// processEventAlarm(devCode,"DiscR",uptime,DiscR); +// processEventAlarm(devCode,"VibL",uptime,VibL); +// processEventAlarm(devCode,"VibR",uptime,VibR); + //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -197,7 +302,7 @@ if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && gas >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), gas)) { @@ -213,7 +318,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R,alarmFlag?"燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R, alarmFlag ? "燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java index f913775..895d201 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java @@ -89,6 +89,7 @@ String bfcf = busDeviceService.getBfcf(devCode); if (DictEnum.BF_ON.equals(bfcf)) { JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); //获取报警事件 List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); List busWellDTOList = dataGasMapper.getListByDevCode(devCode); @@ -96,25 +97,43 @@ if (busWellDTOList != null && busWellDTOList.size() > 0) { for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 if (!alarmDeviceRuleResponseDTO.isPresent()) continue; //1.查询是否已存在该类报警 if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { @@ -141,6 +160,9 @@ String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); gas = String.format("%.2f", Double.valueOf(gas)); //1.存数据 save(DataTubeOther.builder() @@ -156,6 +178,9 @@ .rsrp(rsrp) .sin(pci) .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) .build());//存储采集数据 //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -186,7 +211,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 98e736b..2288075 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -216,5 +216,15 @@ public ReturnDTO syncDeviceStatus() { return ReturnUtil.success(iBusDeviceService.syncDeviceStatus()); } + + @ApiOperation("根据闸井id获取设备信息") + @PostMapping("/getListByWellId") + @ResponseBody + public ReturnDTO getListByWellId(@RequestBody IdDTO idDTO) { + Assert.isFalse(ObjectUtil.isEmpty(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iBusDeviceService.getListByWellId(idDTO.getId())); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java index 72a2d84..d6d9743 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java @@ -85,6 +85,7 @@ return ReturnUtil.success(iBusLedgerService.detail(idDTO.getId())); } + /** * 同步三级部门 * diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java index 9e412d2..4316b56 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java @@ -1,22 +1,33 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.response.ErrorResponseData; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; +import com.casic.missiles.modular.device.dto.BusPositionImportDTO; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.ReturnUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataAccessException; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; /** @@ -40,8 +51,44 @@ @PostMapping("/addPosition") @ResponseBody public ReturnDTO addPosition(@RequestBody BusLedgerPipe busLedgerPipe) { + + List busLedgerPipeList = iBusLedgerPipeService.getListByNumber(busLedgerPipe.getTagNumber()); + if(busLedgerPipeList!=null&&busLedgerPipeList.size()>0){ + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE,"安装位号已存!!!"); + } + Long id =IdUtil.getSnowflake(1,2).nextId(); + busLedgerPipe.setId(id); iBusLedgerPipeService.save(busLedgerPipe); - return ReturnUtil.success(busLedgerPipe.getId()); + return ReturnUtil.success(id); + } + + @ApiOperation("批量导入") + @RequestMapping(value = "/batchImport", method = RequestMethod.POST) + @ResponseBody + public Object batchImport(@RequestParam("file") MultipartFile file) { + List results = new ArrayList<>(); + try { + results = this.importExcel(BusPositionImportDTO.class, file, null, null); + List list = iBusLedgerPipeService.addPositionBatch(results); + if (!CollectionUtil.isEmpty(list)) { + //获取校验报错信息 + return new ErrorResponseData(list.get(0)); + } + } catch (Exception e) { + return catchMybatisPlusException(e, "导入位置信息失败"); + } + return ResponseData.success(); + } + + private ResponseData catchMybatisPlusException(Exception e, String errorMsg) { + if (e instanceof DataAccessException) { + DataAccessException mybatisPlusException = (DataAccessException) e; + String message = mybatisPlusException.getRootCause().getMessage(); + if (message.contains("Duplicate entry '")) { + return new ErrorResponseData("安装位号重复:" + message.replaceAll("Duplicate entry '", "").replaceAll("' for key 'DEVCODE'", "")); + } + } + return new ErrorResponseData(errorMsg); } @ApiOperation("编辑点位") diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java new file mode 100644 index 0000000..fc881a1 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.data.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 外协管盯 前端控制器 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RestController +@RequestMapping("/system/dataGasOther") +public class DataGasOtherController { + +} + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java new file mode 100644 index 0000000..b5f3627 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.data.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 外协管盯 Mapper 接口 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Mapper +public interface DataGasOtherMapper extends BaseMapper { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml new file mode 100644 index 0000000..8ce1455 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID, DEVCODE, WELL_CODE, WELL_NUMBER, GASVAL, VBAT, BATSTA, SIN, RSRP, SINR, UPTIME, LOGTIME, SIG, TEMP, SS_STATE + + + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java new file mode 100644 index 0000000..53972ba --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java @@ -0,0 +1,94 @@ +package com.casic.missiles.modular.data.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 外协管盯 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Builder +@Data +@TableName("data_gas_other") +@ApiModel(value = "DataGasOther对象", description = "外协管盯") +public class DataGasOther implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId("ID") + private Long id; + + @ApiModelProperty("设备编号") + @TableField("DEVCODE") + private String devcode; + + @ApiModelProperty("点位编号") + @TableField("WELL_CODE") + private String wellCode; + + @ApiModelProperty("位号") + @TableField("WELL_NUMBER") + private String wellNumber; + + @ApiModelProperty("气体浓度采样值") + @TableField("GASVAL") + private String gasval; + + @ApiModelProperty("设备电池电压值(毫伏)") + @TableField("VBAT") + private String vbat; + + @ApiModelProperty("电池状态0 正常、 1 低电告警、2 关机") + @TableField("BATSTA") + private String batsta; + + @ApiModelProperty("接收信号强度等级") + @TableField("SIN") + private String sin; + + @ApiModelProperty("接收信号参考质量 服务小 区的 RSRP 值") + @TableField("RSRP") + private String rsrp; + + @ApiModelProperty("信噪比") + @TableField("SINR") + private String sinr; + + @ApiModelProperty("采集时间") + @TableField("UPTIME") + private Date uptime; + + @ApiModelProperty("上传时间") + @TableField("LOGTIME") + private Date logtime; + + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态,0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java index 86077b8..f4d4417 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java @@ -76,4 +76,17 @@ private Date logtime; + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态:0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java new file mode 100644 index 0000000..842ca0b --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.data.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.data.entity.DataGasOther; + +/** + *

+ * 外协管盯 服务类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +public interface IDataGasOtherService extends IService { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java new file mode 100644 index 0000000..4c660e9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java @@ -0,0 +1,226 @@ +package com.casic.missiles.modular.data.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.enums.DeviceTypeEnum; +import com.casic.missiles.enums.DictEnum; +import com.casic.missiles.modular.alarm.dto.AlarmDeviceRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.AlarmRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.BusAlarmLedgerDTO; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.data.dao.DataGasMapper; +import com.casic.missiles.modular.data.dao.DataGasOtherMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import com.casic.missiles.modular.data.entity.DataTubeOther; +import com.casic.missiles.modular.data.service.IDataAbstractService; +import com.casic.missiles.modular.data.service.IDataGasOtherService; +import com.casic.missiles.modular.data.service.ITrackLogService; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Optional; + +/** + *

+ * 外协管盯 服务实现类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RequiredArgsConstructor +@Service +public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { + + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + private final DataGasMapper dataGasMapper; + private final IAlarmRecordsService alarmRecordsService; + private final IAlarmRuleService alarmRuleService; + private final ITrackLogService iTrackLogService; + private final IBusDeviceService busDeviceService; + + @Override + public void process(String dataContent) { + + //解析数据+根据业务处理存储数据 + JSONObject json = JSONObject.parseObject(dataContent); + String devCode = json.get("devCode").toString(); + JSONObject jsonObject = json.getJSONObject("mBody"); + if (mType[0].equals(json.get("mType")) || mType[3].equals(json.get("mType"))) {//存储上报数据 + this.processNormalData(jsonObject, devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + this.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.TubeOther.name().equals(json.get("devType"))) { + if ("TubeOtherConfigSuccess".equals(jsonObject.get("bType"))) { +// deviceConfigManager.updateStatus(devCode); + } + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } else if (mType[4].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); +// imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; + try { + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); + } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + } + } + + @Transactional + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.getString("cell"); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = jsonObject.getJSONArray("datas"); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + String bfcf = busDeviceService.getBfcf(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).getString("gasval"); + String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); + String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); + String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataGasOther.builder() + .wellCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .wellNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .devcode(devCode) +// .cell(cell) + .gasval(gas) + .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime))) + .logtime(new Date()) + .vbat(vbat) + .batsta(batsta) + .rsrp(rsrp) + .sin(pci) + .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) + .build());//存储采集数据 + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) continue; + + //3.清除设备告警 + alarmRecordsService.cancelDeviceAlarm(devCode); + //4.存报警 + //若没绑定井,则不产生报警 + boolean alarmFlag = false; + if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { + //获取报警规则 + List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); + for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { + if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && + Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { + alarmFlag = true; + //写入报警 + //1、判断报警是否已存在 + if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.TubeOther.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); + //7.更新管线状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java index d248540..b33a1ee 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java @@ -91,7 +91,6 @@ } - public List getBusAlarmLedgerList(String devCode) { return this.dataGasMapper.getListByDevCode(devCode); } @@ -113,6 +112,13 @@ for (int i = 0; i < jsonArray.size(); i++) { try { String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) .findFirst(); @@ -175,18 +181,18 @@ alarmRecordsService.cancelDeviceAlarm(devCode); //4.存报警 //若没绑定井,则不产生报警 - boolean alarmFlag = false; + boolean alarmFlag = false; if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { //获取报警规则 List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { - alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); } break; } @@ -197,7 +203,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及设备状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新监测井状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java index e848fce..6297093 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java @@ -84,42 +84,78 @@ } - @Transactional - public void processAlarmData(JSONObject jsonObject, String devCode) { - JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + public void processEventAlarm(String devCode, String eventTypeCode, String logTime, String eventValue) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - //获取报警事件 - List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - - List busWellDTOList = dataGasMapper.getListByDevCode(devCode); - //若没绑定井,则不产生报警 - if (busWellDTOList != null && busWellDTOList.size() > 0) { - - for (int i = 0; i < jsonArray.size(); i++) { + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + //特殊处理消警 + if ("0".equals(eventValue)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, eventTypeCode); + } + return; } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> eventTypeCode.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 - if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + if (!alarmDeviceRuleResponseDTO.isPresent()) return; //1.查询是否已存在该类报警 - if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) return; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); - - + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + } + } + } + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + try { + String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmEventCode)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } } } } @@ -169,7 +205,76 @@ .rightVibrateAlarm(VibR) .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(uptime))) .logtime(new Date()) - .build());//存储采集数据 + .build()); + + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + ruleResponseDTOList.forEach(ruleResponseDTO -> { + + if ("Sloping".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Sloping)&&(!alarmRecordsService.isWatchAlarms(devCode,"Sloping"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Sloping", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Sloping)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Sloping"); + + } + } + if ("Destroy".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Destroy)&&(!alarmRecordsService.isWatchAlarms(devCode,"Destroy"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Destroy", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Destroy)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Destroy"); + + } + } + if ("Leak".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Leak)&&(!alarmRecordsService.isWatchAlarms(devCode,"Leak"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Leak", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Leak)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Leak"); + + } + } + if ("DiscL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscL)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscL"); + + } + } + if ("DiscR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscR)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscR"); + } + } + + if ("VibL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibL)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibL"); + } + } + if ("VibR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibR)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibR"); + } + } + }); + +// //处理报警事件 +// processEventAlarm(devCode,"Sloping",uptime,Sloping); +// processEventAlarm(devCode,"Destroy",uptime,Destroy); +// processEventAlarm(devCode,"Leak",uptime,Leak); +// processEventAlarm(devCode,"DiscL",uptime,DiscL); +// processEventAlarm(devCode,"DiscR",uptime,DiscR); +// processEventAlarm(devCode,"VibL",uptime,VibL); +// processEventAlarm(devCode,"VibR",uptime,VibR); + //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -197,7 +302,7 @@ if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && gas >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), gas)) { @@ -213,7 +318,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R,alarmFlag?"燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R, alarmFlag ? "燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java index f913775..895d201 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java @@ -89,6 +89,7 @@ String bfcf = busDeviceService.getBfcf(devCode); if (DictEnum.BF_ON.equals(bfcf)) { JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); //获取报警事件 List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); List busWellDTOList = dataGasMapper.getListByDevCode(devCode); @@ -96,25 +97,43 @@ if (busWellDTOList != null && busWellDTOList.size() > 0) { for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 if (!alarmDeviceRuleResponseDTO.isPresent()) continue; //1.查询是否已存在该类报警 if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { @@ -141,6 +160,9 @@ String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); gas = String.format("%.2f", Double.valueOf(gas)); //1.存数据 save(DataTubeOther.builder() @@ -156,6 +178,9 @@ .rsrp(rsrp) .sin(pci) .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) .build());//存储采集数据 //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -186,7 +211,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 98e736b..2288075 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -216,5 +216,15 @@ public ReturnDTO syncDeviceStatus() { return ReturnUtil.success(iBusDeviceService.syncDeviceStatus()); } + + @ApiOperation("根据闸井id获取设备信息") + @PostMapping("/getListByWellId") + @ResponseBody + public ReturnDTO getListByWellId(@RequestBody IdDTO idDTO) { + Assert.isFalse(ObjectUtil.isEmpty(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iBusDeviceService.getListByWellId(idDTO.getId())); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java index 72a2d84..d6d9743 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java @@ -85,6 +85,7 @@ return ReturnUtil.success(iBusLedgerService.detail(idDTO.getId())); } + /** * 同步三级部门 * diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java index 9e412d2..4316b56 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java @@ -1,22 +1,33 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.response.ErrorResponseData; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; +import com.casic.missiles.modular.device.dto.BusPositionImportDTO; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.ReturnUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataAccessException; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; /** @@ -40,8 +51,44 @@ @PostMapping("/addPosition") @ResponseBody public ReturnDTO addPosition(@RequestBody BusLedgerPipe busLedgerPipe) { + + List busLedgerPipeList = iBusLedgerPipeService.getListByNumber(busLedgerPipe.getTagNumber()); + if(busLedgerPipeList!=null&&busLedgerPipeList.size()>0){ + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE,"安装位号已存!!!"); + } + Long id =IdUtil.getSnowflake(1,2).nextId(); + busLedgerPipe.setId(id); iBusLedgerPipeService.save(busLedgerPipe); - return ReturnUtil.success(busLedgerPipe.getId()); + return ReturnUtil.success(id); + } + + @ApiOperation("批量导入") + @RequestMapping(value = "/batchImport", method = RequestMethod.POST) + @ResponseBody + public Object batchImport(@RequestParam("file") MultipartFile file) { + List results = new ArrayList<>(); + try { + results = this.importExcel(BusPositionImportDTO.class, file, null, null); + List list = iBusLedgerPipeService.addPositionBatch(results); + if (!CollectionUtil.isEmpty(list)) { + //获取校验报错信息 + return new ErrorResponseData(list.get(0)); + } + } catch (Exception e) { + return catchMybatisPlusException(e, "导入位置信息失败"); + } + return ResponseData.success(); + } + + private ResponseData catchMybatisPlusException(Exception e, String errorMsg) { + if (e instanceof DataAccessException) { + DataAccessException mybatisPlusException = (DataAccessException) e; + String message = mybatisPlusException.getRootCause().getMessage(); + if (message.contains("Duplicate entry '")) { + return new ErrorResponseData("安装位号重复:" + message.replaceAll("Duplicate entry '", "").replaceAll("' for key 'DEVCODE'", "")); + } + } + return new ErrorResponseData(errorMsg); } @ApiOperation("编辑点位") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java index d1e08a8..d938876 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java @@ -51,6 +51,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getOperatorName()), "CREATE_USER", request.getOperatorName()); queryWrapper.ge(ObjectUtil.isNotEmpty(request.getStartTime()), "START_TIME", request.getStartTime()); queryWrapper.le(ObjectUtil.isNotEmpty(request.getEndTime()), "END_TIME", request.getEndTime()); + queryWrapper.orderByDesc("START_TIME"); return ReturnUtil.success(super.packForBT(iSyncLogService.page(page, queryWrapper))); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java new file mode 100644 index 0000000..fc881a1 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.data.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 外协管盯 前端控制器 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RestController +@RequestMapping("/system/dataGasOther") +public class DataGasOtherController { + +} + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java new file mode 100644 index 0000000..b5f3627 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.data.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 外协管盯 Mapper 接口 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Mapper +public interface DataGasOtherMapper extends BaseMapper { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml new file mode 100644 index 0000000..8ce1455 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID, DEVCODE, WELL_CODE, WELL_NUMBER, GASVAL, VBAT, BATSTA, SIN, RSRP, SINR, UPTIME, LOGTIME, SIG, TEMP, SS_STATE + + + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java new file mode 100644 index 0000000..53972ba --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java @@ -0,0 +1,94 @@ +package com.casic.missiles.modular.data.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 外协管盯 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Builder +@Data +@TableName("data_gas_other") +@ApiModel(value = "DataGasOther对象", description = "外协管盯") +public class DataGasOther implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId("ID") + private Long id; + + @ApiModelProperty("设备编号") + @TableField("DEVCODE") + private String devcode; + + @ApiModelProperty("点位编号") + @TableField("WELL_CODE") + private String wellCode; + + @ApiModelProperty("位号") + @TableField("WELL_NUMBER") + private String wellNumber; + + @ApiModelProperty("气体浓度采样值") + @TableField("GASVAL") + private String gasval; + + @ApiModelProperty("设备电池电压值(毫伏)") + @TableField("VBAT") + private String vbat; + + @ApiModelProperty("电池状态0 正常、 1 低电告警、2 关机") + @TableField("BATSTA") + private String batsta; + + @ApiModelProperty("接收信号强度等级") + @TableField("SIN") + private String sin; + + @ApiModelProperty("接收信号参考质量 服务小 区的 RSRP 值") + @TableField("RSRP") + private String rsrp; + + @ApiModelProperty("信噪比") + @TableField("SINR") + private String sinr; + + @ApiModelProperty("采集时间") + @TableField("UPTIME") + private Date uptime; + + @ApiModelProperty("上传时间") + @TableField("LOGTIME") + private Date logtime; + + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态,0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java index 86077b8..f4d4417 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java @@ -76,4 +76,17 @@ private Date logtime; + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态:0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java new file mode 100644 index 0000000..842ca0b --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.data.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.data.entity.DataGasOther; + +/** + *

+ * 外协管盯 服务类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +public interface IDataGasOtherService extends IService { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java new file mode 100644 index 0000000..4c660e9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java @@ -0,0 +1,226 @@ +package com.casic.missiles.modular.data.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.enums.DeviceTypeEnum; +import com.casic.missiles.enums.DictEnum; +import com.casic.missiles.modular.alarm.dto.AlarmDeviceRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.AlarmRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.BusAlarmLedgerDTO; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.data.dao.DataGasMapper; +import com.casic.missiles.modular.data.dao.DataGasOtherMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import com.casic.missiles.modular.data.entity.DataTubeOther; +import com.casic.missiles.modular.data.service.IDataAbstractService; +import com.casic.missiles.modular.data.service.IDataGasOtherService; +import com.casic.missiles.modular.data.service.ITrackLogService; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Optional; + +/** + *

+ * 外协管盯 服务实现类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RequiredArgsConstructor +@Service +public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { + + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + private final DataGasMapper dataGasMapper; + private final IAlarmRecordsService alarmRecordsService; + private final IAlarmRuleService alarmRuleService; + private final ITrackLogService iTrackLogService; + private final IBusDeviceService busDeviceService; + + @Override + public void process(String dataContent) { + + //解析数据+根据业务处理存储数据 + JSONObject json = JSONObject.parseObject(dataContent); + String devCode = json.get("devCode").toString(); + JSONObject jsonObject = json.getJSONObject("mBody"); + if (mType[0].equals(json.get("mType")) || mType[3].equals(json.get("mType"))) {//存储上报数据 + this.processNormalData(jsonObject, devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + this.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.TubeOther.name().equals(json.get("devType"))) { + if ("TubeOtherConfigSuccess".equals(jsonObject.get("bType"))) { +// deviceConfigManager.updateStatus(devCode); + } + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } else if (mType[4].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); +// imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; + try { + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); + } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + } + } + + @Transactional + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.getString("cell"); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = jsonObject.getJSONArray("datas"); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + String bfcf = busDeviceService.getBfcf(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).getString("gasval"); + String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); + String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); + String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataGasOther.builder() + .wellCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .wellNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .devcode(devCode) +// .cell(cell) + .gasval(gas) + .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime))) + .logtime(new Date()) + .vbat(vbat) + .batsta(batsta) + .rsrp(rsrp) + .sin(pci) + .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) + .build());//存储采集数据 + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) continue; + + //3.清除设备告警 + alarmRecordsService.cancelDeviceAlarm(devCode); + //4.存报警 + //若没绑定井,则不产生报警 + boolean alarmFlag = false; + if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { + //获取报警规则 + List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); + for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { + if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && + Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { + alarmFlag = true; + //写入报警 + //1、判断报警是否已存在 + if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.TubeOther.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); + //7.更新管线状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java index d248540..b33a1ee 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java @@ -91,7 +91,6 @@ } - public List getBusAlarmLedgerList(String devCode) { return this.dataGasMapper.getListByDevCode(devCode); } @@ -113,6 +112,13 @@ for (int i = 0; i < jsonArray.size(); i++) { try { String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) .findFirst(); @@ -175,18 +181,18 @@ alarmRecordsService.cancelDeviceAlarm(devCode); //4.存报警 //若没绑定井,则不产生报警 - boolean alarmFlag = false; + boolean alarmFlag = false; if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { //获取报警规则 List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { - alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); } break; } @@ -197,7 +203,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及设备状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新监测井状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java index e848fce..6297093 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java @@ -84,42 +84,78 @@ } - @Transactional - public void processAlarmData(JSONObject jsonObject, String devCode) { - JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + public void processEventAlarm(String devCode, String eventTypeCode, String logTime, String eventValue) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - //获取报警事件 - List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - - List busWellDTOList = dataGasMapper.getListByDevCode(devCode); - //若没绑定井,则不产生报警 - if (busWellDTOList != null && busWellDTOList.size() > 0) { - - for (int i = 0; i < jsonArray.size(); i++) { + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + //特殊处理消警 + if ("0".equals(eventValue)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, eventTypeCode); + } + return; } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> eventTypeCode.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 - if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + if (!alarmDeviceRuleResponseDTO.isPresent()) return; //1.查询是否已存在该类报警 - if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) return; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); - - + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + } + } + } + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + try { + String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmEventCode)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } } } } @@ -169,7 +205,76 @@ .rightVibrateAlarm(VibR) .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(uptime))) .logtime(new Date()) - .build());//存储采集数据 + .build()); + + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + ruleResponseDTOList.forEach(ruleResponseDTO -> { + + if ("Sloping".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Sloping)&&(!alarmRecordsService.isWatchAlarms(devCode,"Sloping"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Sloping", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Sloping)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Sloping"); + + } + } + if ("Destroy".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Destroy)&&(!alarmRecordsService.isWatchAlarms(devCode,"Destroy"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Destroy", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Destroy)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Destroy"); + + } + } + if ("Leak".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Leak)&&(!alarmRecordsService.isWatchAlarms(devCode,"Leak"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Leak", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Leak)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Leak"); + + } + } + if ("DiscL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscL)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscL"); + + } + } + if ("DiscR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscR)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscR"); + } + } + + if ("VibL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibL)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibL"); + } + } + if ("VibR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibR)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibR"); + } + } + }); + +// //处理报警事件 +// processEventAlarm(devCode,"Sloping",uptime,Sloping); +// processEventAlarm(devCode,"Destroy",uptime,Destroy); +// processEventAlarm(devCode,"Leak",uptime,Leak); +// processEventAlarm(devCode,"DiscL",uptime,DiscL); +// processEventAlarm(devCode,"DiscR",uptime,DiscR); +// processEventAlarm(devCode,"VibL",uptime,VibL); +// processEventAlarm(devCode,"VibR",uptime,VibR); + //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -197,7 +302,7 @@ if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && gas >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), gas)) { @@ -213,7 +318,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R,alarmFlag?"燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R, alarmFlag ? "燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java index f913775..895d201 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java @@ -89,6 +89,7 @@ String bfcf = busDeviceService.getBfcf(devCode); if (DictEnum.BF_ON.equals(bfcf)) { JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); //获取报警事件 List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); List busWellDTOList = dataGasMapper.getListByDevCode(devCode); @@ -96,25 +97,43 @@ if (busWellDTOList != null && busWellDTOList.size() > 0) { for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 if (!alarmDeviceRuleResponseDTO.isPresent()) continue; //1.查询是否已存在该类报警 if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { @@ -141,6 +160,9 @@ String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); gas = String.format("%.2f", Double.valueOf(gas)); //1.存数据 save(DataTubeOther.builder() @@ -156,6 +178,9 @@ .rsrp(rsrp) .sin(pci) .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) .build());//存储采集数据 //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -186,7 +211,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 98e736b..2288075 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -216,5 +216,15 @@ public ReturnDTO syncDeviceStatus() { return ReturnUtil.success(iBusDeviceService.syncDeviceStatus()); } + + @ApiOperation("根据闸井id获取设备信息") + @PostMapping("/getListByWellId") + @ResponseBody + public ReturnDTO getListByWellId(@RequestBody IdDTO idDTO) { + Assert.isFalse(ObjectUtil.isEmpty(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iBusDeviceService.getListByWellId(idDTO.getId())); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java index 72a2d84..d6d9743 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java @@ -85,6 +85,7 @@ return ReturnUtil.success(iBusLedgerService.detail(idDTO.getId())); } + /** * 同步三级部门 * diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java index 9e412d2..4316b56 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java @@ -1,22 +1,33 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.response.ErrorResponseData; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; +import com.casic.missiles.modular.device.dto.BusPositionImportDTO; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.ReturnUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataAccessException; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; /** @@ -40,8 +51,44 @@ @PostMapping("/addPosition") @ResponseBody public ReturnDTO addPosition(@RequestBody BusLedgerPipe busLedgerPipe) { + + List busLedgerPipeList = iBusLedgerPipeService.getListByNumber(busLedgerPipe.getTagNumber()); + if(busLedgerPipeList!=null&&busLedgerPipeList.size()>0){ + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE,"安装位号已存!!!"); + } + Long id =IdUtil.getSnowflake(1,2).nextId(); + busLedgerPipe.setId(id); iBusLedgerPipeService.save(busLedgerPipe); - return ReturnUtil.success(busLedgerPipe.getId()); + return ReturnUtil.success(id); + } + + @ApiOperation("批量导入") + @RequestMapping(value = "/batchImport", method = RequestMethod.POST) + @ResponseBody + public Object batchImport(@RequestParam("file") MultipartFile file) { + List results = new ArrayList<>(); + try { + results = this.importExcel(BusPositionImportDTO.class, file, null, null); + List list = iBusLedgerPipeService.addPositionBatch(results); + if (!CollectionUtil.isEmpty(list)) { + //获取校验报错信息 + return new ErrorResponseData(list.get(0)); + } + } catch (Exception e) { + return catchMybatisPlusException(e, "导入位置信息失败"); + } + return ResponseData.success(); + } + + private ResponseData catchMybatisPlusException(Exception e, String errorMsg) { + if (e instanceof DataAccessException) { + DataAccessException mybatisPlusException = (DataAccessException) e; + String message = mybatisPlusException.getRootCause().getMessage(); + if (message.contains("Duplicate entry '")) { + return new ErrorResponseData("安装位号重复:" + message.replaceAll("Duplicate entry '", "").replaceAll("' for key 'DEVCODE'", "")); + } + } + return new ErrorResponseData(errorMsg); } @ApiOperation("编辑点位") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java index d1e08a8..d938876 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java @@ -51,6 +51,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getOperatorName()), "CREATE_USER", request.getOperatorName()); queryWrapper.ge(ObjectUtil.isNotEmpty(request.getStartTime()), "START_TIME", request.getStartTime()); queryWrapper.le(ObjectUtil.isNotEmpty(request.getEndTime()), "END_TIME", request.getEndTime()); + queryWrapper.orderByDesc("START_TIME"); return ReturnUtil.success(super.packForBT(iSyncLogService.page(page, queryWrapper))); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java index 5ee5291..23ddee9 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java @@ -73,4 +73,12 @@ " where bd.DEVCODE= #{devcode} and bd.VALID=1 " + ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD asc") List getDeviceTypeRule(@Param("devcode") String devcode); + + + @Select("SELECT bd.* from bus_device bd " + + "left JOIN bus_device_ledger bl on bd.id= bl.DEVICE_ID and bl.VALID=1 " + + "LEFT JOIN bus_ledger_all_view bv on bv.id= bl.LEDGER_ID and bv.type= bl.TYPE and bv.VALID=1 " + + "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") + List getListByWellId(@Param("wellId") Long wellId); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java new file mode 100644 index 0000000..fc881a1 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.data.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 外协管盯 前端控制器 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RestController +@RequestMapping("/system/dataGasOther") +public class DataGasOtherController { + +} + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java new file mode 100644 index 0000000..b5f3627 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.data.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 外协管盯 Mapper 接口 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Mapper +public interface DataGasOtherMapper extends BaseMapper { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml new file mode 100644 index 0000000..8ce1455 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID, DEVCODE, WELL_CODE, WELL_NUMBER, GASVAL, VBAT, BATSTA, SIN, RSRP, SINR, UPTIME, LOGTIME, SIG, TEMP, SS_STATE + + + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java new file mode 100644 index 0000000..53972ba --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java @@ -0,0 +1,94 @@ +package com.casic.missiles.modular.data.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 外协管盯 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Builder +@Data +@TableName("data_gas_other") +@ApiModel(value = "DataGasOther对象", description = "外协管盯") +public class DataGasOther implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId("ID") + private Long id; + + @ApiModelProperty("设备编号") + @TableField("DEVCODE") + private String devcode; + + @ApiModelProperty("点位编号") + @TableField("WELL_CODE") + private String wellCode; + + @ApiModelProperty("位号") + @TableField("WELL_NUMBER") + private String wellNumber; + + @ApiModelProperty("气体浓度采样值") + @TableField("GASVAL") + private String gasval; + + @ApiModelProperty("设备电池电压值(毫伏)") + @TableField("VBAT") + private String vbat; + + @ApiModelProperty("电池状态0 正常、 1 低电告警、2 关机") + @TableField("BATSTA") + private String batsta; + + @ApiModelProperty("接收信号强度等级") + @TableField("SIN") + private String sin; + + @ApiModelProperty("接收信号参考质量 服务小 区的 RSRP 值") + @TableField("RSRP") + private String rsrp; + + @ApiModelProperty("信噪比") + @TableField("SINR") + private String sinr; + + @ApiModelProperty("采集时间") + @TableField("UPTIME") + private Date uptime; + + @ApiModelProperty("上传时间") + @TableField("LOGTIME") + private Date logtime; + + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态,0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java index 86077b8..f4d4417 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java @@ -76,4 +76,17 @@ private Date logtime; + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态:0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java new file mode 100644 index 0000000..842ca0b --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.data.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.data.entity.DataGasOther; + +/** + *

+ * 外协管盯 服务类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +public interface IDataGasOtherService extends IService { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java new file mode 100644 index 0000000..4c660e9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java @@ -0,0 +1,226 @@ +package com.casic.missiles.modular.data.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.enums.DeviceTypeEnum; +import com.casic.missiles.enums.DictEnum; +import com.casic.missiles.modular.alarm.dto.AlarmDeviceRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.AlarmRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.BusAlarmLedgerDTO; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.data.dao.DataGasMapper; +import com.casic.missiles.modular.data.dao.DataGasOtherMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import com.casic.missiles.modular.data.entity.DataTubeOther; +import com.casic.missiles.modular.data.service.IDataAbstractService; +import com.casic.missiles.modular.data.service.IDataGasOtherService; +import com.casic.missiles.modular.data.service.ITrackLogService; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Optional; + +/** + *

+ * 外协管盯 服务实现类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RequiredArgsConstructor +@Service +public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { + + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + private final DataGasMapper dataGasMapper; + private final IAlarmRecordsService alarmRecordsService; + private final IAlarmRuleService alarmRuleService; + private final ITrackLogService iTrackLogService; + private final IBusDeviceService busDeviceService; + + @Override + public void process(String dataContent) { + + //解析数据+根据业务处理存储数据 + JSONObject json = JSONObject.parseObject(dataContent); + String devCode = json.get("devCode").toString(); + JSONObject jsonObject = json.getJSONObject("mBody"); + if (mType[0].equals(json.get("mType")) || mType[3].equals(json.get("mType"))) {//存储上报数据 + this.processNormalData(jsonObject, devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + this.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.TubeOther.name().equals(json.get("devType"))) { + if ("TubeOtherConfigSuccess".equals(jsonObject.get("bType"))) { +// deviceConfigManager.updateStatus(devCode); + } + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } else if (mType[4].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); +// imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; + try { + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); + } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + } + } + + @Transactional + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.getString("cell"); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = jsonObject.getJSONArray("datas"); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + String bfcf = busDeviceService.getBfcf(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).getString("gasval"); + String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); + String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); + String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataGasOther.builder() + .wellCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .wellNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .devcode(devCode) +// .cell(cell) + .gasval(gas) + .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime))) + .logtime(new Date()) + .vbat(vbat) + .batsta(batsta) + .rsrp(rsrp) + .sin(pci) + .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) + .build());//存储采集数据 + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) continue; + + //3.清除设备告警 + alarmRecordsService.cancelDeviceAlarm(devCode); + //4.存报警 + //若没绑定井,则不产生报警 + boolean alarmFlag = false; + if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { + //获取报警规则 + List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); + for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { + if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && + Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { + alarmFlag = true; + //写入报警 + //1、判断报警是否已存在 + if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.TubeOther.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); + //7.更新管线状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java index d248540..b33a1ee 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java @@ -91,7 +91,6 @@ } - public List getBusAlarmLedgerList(String devCode) { return this.dataGasMapper.getListByDevCode(devCode); } @@ -113,6 +112,13 @@ for (int i = 0; i < jsonArray.size(); i++) { try { String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) .findFirst(); @@ -175,18 +181,18 @@ alarmRecordsService.cancelDeviceAlarm(devCode); //4.存报警 //若没绑定井,则不产生报警 - boolean alarmFlag = false; + boolean alarmFlag = false; if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { //获取报警规则 List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { - alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); } break; } @@ -197,7 +203,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及设备状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新监测井状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java index e848fce..6297093 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java @@ -84,42 +84,78 @@ } - @Transactional - public void processAlarmData(JSONObject jsonObject, String devCode) { - JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + public void processEventAlarm(String devCode, String eventTypeCode, String logTime, String eventValue) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - //获取报警事件 - List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - - List busWellDTOList = dataGasMapper.getListByDevCode(devCode); - //若没绑定井,则不产生报警 - if (busWellDTOList != null && busWellDTOList.size() > 0) { - - for (int i = 0; i < jsonArray.size(); i++) { + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + //特殊处理消警 + if ("0".equals(eventValue)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, eventTypeCode); + } + return; } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> eventTypeCode.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 - if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + if (!alarmDeviceRuleResponseDTO.isPresent()) return; //1.查询是否已存在该类报警 - if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) return; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); - - + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + } + } + } + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + try { + String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmEventCode)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } } } } @@ -169,7 +205,76 @@ .rightVibrateAlarm(VibR) .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(uptime))) .logtime(new Date()) - .build());//存储采集数据 + .build()); + + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + ruleResponseDTOList.forEach(ruleResponseDTO -> { + + if ("Sloping".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Sloping)&&(!alarmRecordsService.isWatchAlarms(devCode,"Sloping"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Sloping", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Sloping)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Sloping"); + + } + } + if ("Destroy".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Destroy)&&(!alarmRecordsService.isWatchAlarms(devCode,"Destroy"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Destroy", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Destroy)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Destroy"); + + } + } + if ("Leak".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Leak)&&(!alarmRecordsService.isWatchAlarms(devCode,"Leak"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Leak", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Leak)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Leak"); + + } + } + if ("DiscL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscL)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscL"); + + } + } + if ("DiscR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscR)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscR"); + } + } + + if ("VibL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibL)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibL"); + } + } + if ("VibR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibR)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibR"); + } + } + }); + +// //处理报警事件 +// processEventAlarm(devCode,"Sloping",uptime,Sloping); +// processEventAlarm(devCode,"Destroy",uptime,Destroy); +// processEventAlarm(devCode,"Leak",uptime,Leak); +// processEventAlarm(devCode,"DiscL",uptime,DiscL); +// processEventAlarm(devCode,"DiscR",uptime,DiscR); +// processEventAlarm(devCode,"VibL",uptime,VibL); +// processEventAlarm(devCode,"VibR",uptime,VibR); + //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -197,7 +302,7 @@ if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && gas >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), gas)) { @@ -213,7 +318,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R,alarmFlag?"燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R, alarmFlag ? "燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java index f913775..895d201 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java @@ -89,6 +89,7 @@ String bfcf = busDeviceService.getBfcf(devCode); if (DictEnum.BF_ON.equals(bfcf)) { JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); //获取报警事件 List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); List busWellDTOList = dataGasMapper.getListByDevCode(devCode); @@ -96,25 +97,43 @@ if (busWellDTOList != null && busWellDTOList.size() > 0) { for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 if (!alarmDeviceRuleResponseDTO.isPresent()) continue; //1.查询是否已存在该类报警 if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { @@ -141,6 +160,9 @@ String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); gas = String.format("%.2f", Double.valueOf(gas)); //1.存数据 save(DataTubeOther.builder() @@ -156,6 +178,9 @@ .rsrp(rsrp) .sin(pci) .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) .build());//存储采集数据 //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -186,7 +211,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 98e736b..2288075 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -216,5 +216,15 @@ public ReturnDTO syncDeviceStatus() { return ReturnUtil.success(iBusDeviceService.syncDeviceStatus()); } + + @ApiOperation("根据闸井id获取设备信息") + @PostMapping("/getListByWellId") + @ResponseBody + public ReturnDTO getListByWellId(@RequestBody IdDTO idDTO) { + Assert.isFalse(ObjectUtil.isEmpty(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iBusDeviceService.getListByWellId(idDTO.getId())); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java index 72a2d84..d6d9743 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java @@ -85,6 +85,7 @@ return ReturnUtil.success(iBusLedgerService.detail(idDTO.getId())); } + /** * 同步三级部门 * diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java index 9e412d2..4316b56 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java @@ -1,22 +1,33 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.response.ErrorResponseData; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; +import com.casic.missiles.modular.device.dto.BusPositionImportDTO; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.ReturnUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataAccessException; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; /** @@ -40,8 +51,44 @@ @PostMapping("/addPosition") @ResponseBody public ReturnDTO addPosition(@RequestBody BusLedgerPipe busLedgerPipe) { + + List busLedgerPipeList = iBusLedgerPipeService.getListByNumber(busLedgerPipe.getTagNumber()); + if(busLedgerPipeList!=null&&busLedgerPipeList.size()>0){ + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE,"安装位号已存!!!"); + } + Long id =IdUtil.getSnowflake(1,2).nextId(); + busLedgerPipe.setId(id); iBusLedgerPipeService.save(busLedgerPipe); - return ReturnUtil.success(busLedgerPipe.getId()); + return ReturnUtil.success(id); + } + + @ApiOperation("批量导入") + @RequestMapping(value = "/batchImport", method = RequestMethod.POST) + @ResponseBody + public Object batchImport(@RequestParam("file") MultipartFile file) { + List results = new ArrayList<>(); + try { + results = this.importExcel(BusPositionImportDTO.class, file, null, null); + List list = iBusLedgerPipeService.addPositionBatch(results); + if (!CollectionUtil.isEmpty(list)) { + //获取校验报错信息 + return new ErrorResponseData(list.get(0)); + } + } catch (Exception e) { + return catchMybatisPlusException(e, "导入位置信息失败"); + } + return ResponseData.success(); + } + + private ResponseData catchMybatisPlusException(Exception e, String errorMsg) { + if (e instanceof DataAccessException) { + DataAccessException mybatisPlusException = (DataAccessException) e; + String message = mybatisPlusException.getRootCause().getMessage(); + if (message.contains("Duplicate entry '")) { + return new ErrorResponseData("安装位号重复:" + message.replaceAll("Duplicate entry '", "").replaceAll("' for key 'DEVCODE'", "")); + } + } + return new ErrorResponseData(errorMsg); } @ApiOperation("编辑点位") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java index d1e08a8..d938876 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java @@ -51,6 +51,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getOperatorName()), "CREATE_USER", request.getOperatorName()); queryWrapper.ge(ObjectUtil.isNotEmpty(request.getStartTime()), "START_TIME", request.getStartTime()); queryWrapper.le(ObjectUtil.isNotEmpty(request.getEndTime()), "END_TIME", request.getEndTime()); + queryWrapper.orderByDesc("START_TIME"); return ReturnUtil.success(super.packForBT(iSyncLogService.page(page, queryWrapper))); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java index 5ee5291..23ddee9 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java @@ -73,4 +73,12 @@ " where bd.DEVCODE= #{devcode} and bd.VALID=1 " + ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD asc") List getDeviceTypeRule(@Param("devcode") String devcode); + + + @Select("SELECT bd.* from bus_device bd " + + "left JOIN bus_device_ledger bl on bd.id= bl.DEVICE_ID and bl.VALID=1 " + + "LEFT JOIN bus_ledger_all_view bv on bv.id= bl.LEDGER_ID and bv.type= bl.TYPE and bv.VALID=1 " + + "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") + List getListByWellId(@Param("wellId") Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java index e1d16c4..a4c3f7a 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java @@ -37,7 +37,7 @@ @Select("SELECT b.ORG_ID,b.ORG_CODE,b.ORG_NAME,b.PARENT_ID FROM `bus_sync_org_relation` b WHERE b.DEL_FLAG =0 and b.PARENT_ID = #{syncId} ") List synDept(@Param("syncId") String syncId); - @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view ") + @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view where VALID=1") List getBusLedgers(); @Select("SELECT DEVCODE FROM `bus_device` where VALID>0 ") diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java new file mode 100644 index 0000000..fc881a1 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.data.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 外协管盯 前端控制器 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RestController +@RequestMapping("/system/dataGasOther") +public class DataGasOtherController { + +} + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java new file mode 100644 index 0000000..b5f3627 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.data.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 外协管盯 Mapper 接口 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Mapper +public interface DataGasOtherMapper extends BaseMapper { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml new file mode 100644 index 0000000..8ce1455 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID, DEVCODE, WELL_CODE, WELL_NUMBER, GASVAL, VBAT, BATSTA, SIN, RSRP, SINR, UPTIME, LOGTIME, SIG, TEMP, SS_STATE + + + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java new file mode 100644 index 0000000..53972ba --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java @@ -0,0 +1,94 @@ +package com.casic.missiles.modular.data.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 外协管盯 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Builder +@Data +@TableName("data_gas_other") +@ApiModel(value = "DataGasOther对象", description = "外协管盯") +public class DataGasOther implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId("ID") + private Long id; + + @ApiModelProperty("设备编号") + @TableField("DEVCODE") + private String devcode; + + @ApiModelProperty("点位编号") + @TableField("WELL_CODE") + private String wellCode; + + @ApiModelProperty("位号") + @TableField("WELL_NUMBER") + private String wellNumber; + + @ApiModelProperty("气体浓度采样值") + @TableField("GASVAL") + private String gasval; + + @ApiModelProperty("设备电池电压值(毫伏)") + @TableField("VBAT") + private String vbat; + + @ApiModelProperty("电池状态0 正常、 1 低电告警、2 关机") + @TableField("BATSTA") + private String batsta; + + @ApiModelProperty("接收信号强度等级") + @TableField("SIN") + private String sin; + + @ApiModelProperty("接收信号参考质量 服务小 区的 RSRP 值") + @TableField("RSRP") + private String rsrp; + + @ApiModelProperty("信噪比") + @TableField("SINR") + private String sinr; + + @ApiModelProperty("采集时间") + @TableField("UPTIME") + private Date uptime; + + @ApiModelProperty("上传时间") + @TableField("LOGTIME") + private Date logtime; + + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态,0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java index 86077b8..f4d4417 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java @@ -76,4 +76,17 @@ private Date logtime; + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态:0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java new file mode 100644 index 0000000..842ca0b --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.data.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.data.entity.DataGasOther; + +/** + *

+ * 外协管盯 服务类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +public interface IDataGasOtherService extends IService { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java new file mode 100644 index 0000000..4c660e9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java @@ -0,0 +1,226 @@ +package com.casic.missiles.modular.data.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.enums.DeviceTypeEnum; +import com.casic.missiles.enums.DictEnum; +import com.casic.missiles.modular.alarm.dto.AlarmDeviceRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.AlarmRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.BusAlarmLedgerDTO; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.data.dao.DataGasMapper; +import com.casic.missiles.modular.data.dao.DataGasOtherMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import com.casic.missiles.modular.data.entity.DataTubeOther; +import com.casic.missiles.modular.data.service.IDataAbstractService; +import com.casic.missiles.modular.data.service.IDataGasOtherService; +import com.casic.missiles.modular.data.service.ITrackLogService; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Optional; + +/** + *

+ * 外协管盯 服务实现类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RequiredArgsConstructor +@Service +public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { + + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + private final DataGasMapper dataGasMapper; + private final IAlarmRecordsService alarmRecordsService; + private final IAlarmRuleService alarmRuleService; + private final ITrackLogService iTrackLogService; + private final IBusDeviceService busDeviceService; + + @Override + public void process(String dataContent) { + + //解析数据+根据业务处理存储数据 + JSONObject json = JSONObject.parseObject(dataContent); + String devCode = json.get("devCode").toString(); + JSONObject jsonObject = json.getJSONObject("mBody"); + if (mType[0].equals(json.get("mType")) || mType[3].equals(json.get("mType"))) {//存储上报数据 + this.processNormalData(jsonObject, devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + this.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.TubeOther.name().equals(json.get("devType"))) { + if ("TubeOtherConfigSuccess".equals(jsonObject.get("bType"))) { +// deviceConfigManager.updateStatus(devCode); + } + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } else if (mType[4].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); +// imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; + try { + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); + } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + } + } + + @Transactional + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.getString("cell"); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = jsonObject.getJSONArray("datas"); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + String bfcf = busDeviceService.getBfcf(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).getString("gasval"); + String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); + String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); + String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataGasOther.builder() + .wellCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .wellNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .devcode(devCode) +// .cell(cell) + .gasval(gas) + .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime))) + .logtime(new Date()) + .vbat(vbat) + .batsta(batsta) + .rsrp(rsrp) + .sin(pci) + .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) + .build());//存储采集数据 + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) continue; + + //3.清除设备告警 + alarmRecordsService.cancelDeviceAlarm(devCode); + //4.存报警 + //若没绑定井,则不产生报警 + boolean alarmFlag = false; + if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { + //获取报警规则 + List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); + for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { + if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && + Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { + alarmFlag = true; + //写入报警 + //1、判断报警是否已存在 + if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.TubeOther.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); + //7.更新管线状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java index d248540..b33a1ee 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java @@ -91,7 +91,6 @@ } - public List getBusAlarmLedgerList(String devCode) { return this.dataGasMapper.getListByDevCode(devCode); } @@ -113,6 +112,13 @@ for (int i = 0; i < jsonArray.size(); i++) { try { String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) .findFirst(); @@ -175,18 +181,18 @@ alarmRecordsService.cancelDeviceAlarm(devCode); //4.存报警 //若没绑定井,则不产生报警 - boolean alarmFlag = false; + boolean alarmFlag = false; if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { //获取报警规则 List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { - alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); } break; } @@ -197,7 +203,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及设备状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新监测井状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java index e848fce..6297093 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java @@ -84,42 +84,78 @@ } - @Transactional - public void processAlarmData(JSONObject jsonObject, String devCode) { - JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + public void processEventAlarm(String devCode, String eventTypeCode, String logTime, String eventValue) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - //获取报警事件 - List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - - List busWellDTOList = dataGasMapper.getListByDevCode(devCode); - //若没绑定井,则不产生报警 - if (busWellDTOList != null && busWellDTOList.size() > 0) { - - for (int i = 0; i < jsonArray.size(); i++) { + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + //特殊处理消警 + if ("0".equals(eventValue)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, eventTypeCode); + } + return; } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> eventTypeCode.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 - if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + if (!alarmDeviceRuleResponseDTO.isPresent()) return; //1.查询是否已存在该类报警 - if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) return; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); - - + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + } + } + } + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + try { + String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmEventCode)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } } } } @@ -169,7 +205,76 @@ .rightVibrateAlarm(VibR) .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(uptime))) .logtime(new Date()) - .build());//存储采集数据 + .build()); + + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + ruleResponseDTOList.forEach(ruleResponseDTO -> { + + if ("Sloping".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Sloping)&&(!alarmRecordsService.isWatchAlarms(devCode,"Sloping"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Sloping", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Sloping)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Sloping"); + + } + } + if ("Destroy".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Destroy)&&(!alarmRecordsService.isWatchAlarms(devCode,"Destroy"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Destroy", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Destroy)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Destroy"); + + } + } + if ("Leak".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Leak)&&(!alarmRecordsService.isWatchAlarms(devCode,"Leak"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Leak", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Leak)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Leak"); + + } + } + if ("DiscL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscL)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscL"); + + } + } + if ("DiscR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscR)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscR"); + } + } + + if ("VibL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibL)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibL"); + } + } + if ("VibR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibR)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibR"); + } + } + }); + +// //处理报警事件 +// processEventAlarm(devCode,"Sloping",uptime,Sloping); +// processEventAlarm(devCode,"Destroy",uptime,Destroy); +// processEventAlarm(devCode,"Leak",uptime,Leak); +// processEventAlarm(devCode,"DiscL",uptime,DiscL); +// processEventAlarm(devCode,"DiscR",uptime,DiscR); +// processEventAlarm(devCode,"VibL",uptime,VibL); +// processEventAlarm(devCode,"VibR",uptime,VibR); + //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -197,7 +302,7 @@ if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && gas >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), gas)) { @@ -213,7 +318,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R,alarmFlag?"燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R, alarmFlag ? "燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java index f913775..895d201 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java @@ -89,6 +89,7 @@ String bfcf = busDeviceService.getBfcf(devCode); if (DictEnum.BF_ON.equals(bfcf)) { JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); //获取报警事件 List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); List busWellDTOList = dataGasMapper.getListByDevCode(devCode); @@ -96,25 +97,43 @@ if (busWellDTOList != null && busWellDTOList.size() > 0) { for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 if (!alarmDeviceRuleResponseDTO.isPresent()) continue; //1.查询是否已存在该类报警 if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { @@ -141,6 +160,9 @@ String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); gas = String.format("%.2f", Double.valueOf(gas)); //1.存数据 save(DataTubeOther.builder() @@ -156,6 +178,9 @@ .rsrp(rsrp) .sin(pci) .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) .build());//存储采集数据 //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -186,7 +211,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 98e736b..2288075 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -216,5 +216,15 @@ public ReturnDTO syncDeviceStatus() { return ReturnUtil.success(iBusDeviceService.syncDeviceStatus()); } + + @ApiOperation("根据闸井id获取设备信息") + @PostMapping("/getListByWellId") + @ResponseBody + public ReturnDTO getListByWellId(@RequestBody IdDTO idDTO) { + Assert.isFalse(ObjectUtil.isEmpty(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iBusDeviceService.getListByWellId(idDTO.getId())); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java index 72a2d84..d6d9743 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java @@ -85,6 +85,7 @@ return ReturnUtil.success(iBusLedgerService.detail(idDTO.getId())); } + /** * 同步三级部门 * diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java index 9e412d2..4316b56 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java @@ -1,22 +1,33 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.response.ErrorResponseData; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; +import com.casic.missiles.modular.device.dto.BusPositionImportDTO; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.ReturnUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataAccessException; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; /** @@ -40,8 +51,44 @@ @PostMapping("/addPosition") @ResponseBody public ReturnDTO addPosition(@RequestBody BusLedgerPipe busLedgerPipe) { + + List busLedgerPipeList = iBusLedgerPipeService.getListByNumber(busLedgerPipe.getTagNumber()); + if(busLedgerPipeList!=null&&busLedgerPipeList.size()>0){ + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE,"安装位号已存!!!"); + } + Long id =IdUtil.getSnowflake(1,2).nextId(); + busLedgerPipe.setId(id); iBusLedgerPipeService.save(busLedgerPipe); - return ReturnUtil.success(busLedgerPipe.getId()); + return ReturnUtil.success(id); + } + + @ApiOperation("批量导入") + @RequestMapping(value = "/batchImport", method = RequestMethod.POST) + @ResponseBody + public Object batchImport(@RequestParam("file") MultipartFile file) { + List results = new ArrayList<>(); + try { + results = this.importExcel(BusPositionImportDTO.class, file, null, null); + List list = iBusLedgerPipeService.addPositionBatch(results); + if (!CollectionUtil.isEmpty(list)) { + //获取校验报错信息 + return new ErrorResponseData(list.get(0)); + } + } catch (Exception e) { + return catchMybatisPlusException(e, "导入位置信息失败"); + } + return ResponseData.success(); + } + + private ResponseData catchMybatisPlusException(Exception e, String errorMsg) { + if (e instanceof DataAccessException) { + DataAccessException mybatisPlusException = (DataAccessException) e; + String message = mybatisPlusException.getRootCause().getMessage(); + if (message.contains("Duplicate entry '")) { + return new ErrorResponseData("安装位号重复:" + message.replaceAll("Duplicate entry '", "").replaceAll("' for key 'DEVCODE'", "")); + } + } + return new ErrorResponseData(errorMsg); } @ApiOperation("编辑点位") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java index d1e08a8..d938876 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java @@ -51,6 +51,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getOperatorName()), "CREATE_USER", request.getOperatorName()); queryWrapper.ge(ObjectUtil.isNotEmpty(request.getStartTime()), "START_TIME", request.getStartTime()); queryWrapper.le(ObjectUtil.isNotEmpty(request.getEndTime()), "END_TIME", request.getEndTime()); + queryWrapper.orderByDesc("START_TIME"); return ReturnUtil.success(super.packForBT(iSyncLogService.page(page, queryWrapper))); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java index 5ee5291..23ddee9 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java @@ -73,4 +73,12 @@ " where bd.DEVCODE= #{devcode} and bd.VALID=1 " + ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD asc") List getDeviceTypeRule(@Param("devcode") String devcode); + + + @Select("SELECT bd.* from bus_device bd " + + "left JOIN bus_device_ledger bl on bd.id= bl.DEVICE_ID and bl.VALID=1 " + + "LEFT JOIN bus_ledger_all_view bv on bv.id= bl.LEDGER_ID and bv.type= bl.TYPE and bv.VALID=1 " + + "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") + List getListByWellId(@Param("wellId") Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java index e1d16c4..a4c3f7a 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java @@ -37,7 +37,7 @@ @Select("SELECT b.ORG_ID,b.ORG_CODE,b.ORG_NAME,b.PARENT_ID FROM `bus_sync_org_relation` b WHERE b.DEL_FLAG =0 and b.PARENT_ID = #{syncId} ") List synDept(@Param("syncId") String syncId); - @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view ") + @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view where VALID=1") List getBusLedgers(); @Select("SELECT DEVCODE FROM `bus_device` where VALID>0 ") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml index 99ef10b..c6d1fff 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml @@ -29,6 +29,7 @@ bp.DEVICE_MODEL as deviceModel, bt.TYPE_NAME as typeName, + bp.DATA_SERVICE as deviceCategory, bm.`NAME` as manufactureName, bl.tagNumber as tagNumber, bl.id as ledgerId, @@ -81,6 +82,10 @@ and bd.LOGTIME #{request.logTime2} + + and bp.DATA_SERVICE =#{request.deviceCategory} + + ORDER BY bd.INSTALL_DATE DESC diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java new file mode 100644 index 0000000..fc881a1 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.data.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 外协管盯 前端控制器 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RestController +@RequestMapping("/system/dataGasOther") +public class DataGasOtherController { + +} + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java new file mode 100644 index 0000000..b5f3627 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.data.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 外协管盯 Mapper 接口 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Mapper +public interface DataGasOtherMapper extends BaseMapper { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml new file mode 100644 index 0000000..8ce1455 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID, DEVCODE, WELL_CODE, WELL_NUMBER, GASVAL, VBAT, BATSTA, SIN, RSRP, SINR, UPTIME, LOGTIME, SIG, TEMP, SS_STATE + + + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java new file mode 100644 index 0000000..53972ba --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java @@ -0,0 +1,94 @@ +package com.casic.missiles.modular.data.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 外协管盯 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Builder +@Data +@TableName("data_gas_other") +@ApiModel(value = "DataGasOther对象", description = "外协管盯") +public class DataGasOther implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId("ID") + private Long id; + + @ApiModelProperty("设备编号") + @TableField("DEVCODE") + private String devcode; + + @ApiModelProperty("点位编号") + @TableField("WELL_CODE") + private String wellCode; + + @ApiModelProperty("位号") + @TableField("WELL_NUMBER") + private String wellNumber; + + @ApiModelProperty("气体浓度采样值") + @TableField("GASVAL") + private String gasval; + + @ApiModelProperty("设备电池电压值(毫伏)") + @TableField("VBAT") + private String vbat; + + @ApiModelProperty("电池状态0 正常、 1 低电告警、2 关机") + @TableField("BATSTA") + private String batsta; + + @ApiModelProperty("接收信号强度等级") + @TableField("SIN") + private String sin; + + @ApiModelProperty("接收信号参考质量 服务小 区的 RSRP 值") + @TableField("RSRP") + private String rsrp; + + @ApiModelProperty("信噪比") + @TableField("SINR") + private String sinr; + + @ApiModelProperty("采集时间") + @TableField("UPTIME") + private Date uptime; + + @ApiModelProperty("上传时间") + @TableField("LOGTIME") + private Date logtime; + + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态,0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java index 86077b8..f4d4417 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java @@ -76,4 +76,17 @@ private Date logtime; + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态:0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java new file mode 100644 index 0000000..842ca0b --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.data.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.data.entity.DataGasOther; + +/** + *

+ * 外协管盯 服务类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +public interface IDataGasOtherService extends IService { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java new file mode 100644 index 0000000..4c660e9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java @@ -0,0 +1,226 @@ +package com.casic.missiles.modular.data.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.enums.DeviceTypeEnum; +import com.casic.missiles.enums.DictEnum; +import com.casic.missiles.modular.alarm.dto.AlarmDeviceRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.AlarmRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.BusAlarmLedgerDTO; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.data.dao.DataGasMapper; +import com.casic.missiles.modular.data.dao.DataGasOtherMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import com.casic.missiles.modular.data.entity.DataTubeOther; +import com.casic.missiles.modular.data.service.IDataAbstractService; +import com.casic.missiles.modular.data.service.IDataGasOtherService; +import com.casic.missiles.modular.data.service.ITrackLogService; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Optional; + +/** + *

+ * 外协管盯 服务实现类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RequiredArgsConstructor +@Service +public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { + + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + private final DataGasMapper dataGasMapper; + private final IAlarmRecordsService alarmRecordsService; + private final IAlarmRuleService alarmRuleService; + private final ITrackLogService iTrackLogService; + private final IBusDeviceService busDeviceService; + + @Override + public void process(String dataContent) { + + //解析数据+根据业务处理存储数据 + JSONObject json = JSONObject.parseObject(dataContent); + String devCode = json.get("devCode").toString(); + JSONObject jsonObject = json.getJSONObject("mBody"); + if (mType[0].equals(json.get("mType")) || mType[3].equals(json.get("mType"))) {//存储上报数据 + this.processNormalData(jsonObject, devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + this.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.TubeOther.name().equals(json.get("devType"))) { + if ("TubeOtherConfigSuccess".equals(jsonObject.get("bType"))) { +// deviceConfigManager.updateStatus(devCode); + } + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } else if (mType[4].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); +// imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; + try { + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); + } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + } + } + + @Transactional + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.getString("cell"); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = jsonObject.getJSONArray("datas"); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + String bfcf = busDeviceService.getBfcf(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).getString("gasval"); + String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); + String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); + String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataGasOther.builder() + .wellCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .wellNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .devcode(devCode) +// .cell(cell) + .gasval(gas) + .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime))) + .logtime(new Date()) + .vbat(vbat) + .batsta(batsta) + .rsrp(rsrp) + .sin(pci) + .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) + .build());//存储采集数据 + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) continue; + + //3.清除设备告警 + alarmRecordsService.cancelDeviceAlarm(devCode); + //4.存报警 + //若没绑定井,则不产生报警 + boolean alarmFlag = false; + if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { + //获取报警规则 + List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); + for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { + if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && + Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { + alarmFlag = true; + //写入报警 + //1、判断报警是否已存在 + if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.TubeOther.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); + //7.更新管线状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java index d248540..b33a1ee 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java @@ -91,7 +91,6 @@ } - public List getBusAlarmLedgerList(String devCode) { return this.dataGasMapper.getListByDevCode(devCode); } @@ -113,6 +112,13 @@ for (int i = 0; i < jsonArray.size(); i++) { try { String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) .findFirst(); @@ -175,18 +181,18 @@ alarmRecordsService.cancelDeviceAlarm(devCode); //4.存报警 //若没绑定井,则不产生报警 - boolean alarmFlag = false; + boolean alarmFlag = false; if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { //获取报警规则 List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { - alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); } break; } @@ -197,7 +203,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及设备状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新监测井状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java index e848fce..6297093 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java @@ -84,42 +84,78 @@ } - @Transactional - public void processAlarmData(JSONObject jsonObject, String devCode) { - JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + public void processEventAlarm(String devCode, String eventTypeCode, String logTime, String eventValue) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - //获取报警事件 - List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - - List busWellDTOList = dataGasMapper.getListByDevCode(devCode); - //若没绑定井,则不产生报警 - if (busWellDTOList != null && busWellDTOList.size() > 0) { - - for (int i = 0; i < jsonArray.size(); i++) { + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + //特殊处理消警 + if ("0".equals(eventValue)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, eventTypeCode); + } + return; } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> eventTypeCode.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 - if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + if (!alarmDeviceRuleResponseDTO.isPresent()) return; //1.查询是否已存在该类报警 - if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) return; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); - - + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + } + } + } + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + try { + String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmEventCode)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } } } } @@ -169,7 +205,76 @@ .rightVibrateAlarm(VibR) .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(uptime))) .logtime(new Date()) - .build());//存储采集数据 + .build()); + + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + ruleResponseDTOList.forEach(ruleResponseDTO -> { + + if ("Sloping".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Sloping)&&(!alarmRecordsService.isWatchAlarms(devCode,"Sloping"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Sloping", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Sloping)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Sloping"); + + } + } + if ("Destroy".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Destroy)&&(!alarmRecordsService.isWatchAlarms(devCode,"Destroy"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Destroy", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Destroy)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Destroy"); + + } + } + if ("Leak".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Leak)&&(!alarmRecordsService.isWatchAlarms(devCode,"Leak"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Leak", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Leak)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Leak"); + + } + } + if ("DiscL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscL)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscL"); + + } + } + if ("DiscR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscR)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscR"); + } + } + + if ("VibL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibL)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibL"); + } + } + if ("VibR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibR)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibR"); + } + } + }); + +// //处理报警事件 +// processEventAlarm(devCode,"Sloping",uptime,Sloping); +// processEventAlarm(devCode,"Destroy",uptime,Destroy); +// processEventAlarm(devCode,"Leak",uptime,Leak); +// processEventAlarm(devCode,"DiscL",uptime,DiscL); +// processEventAlarm(devCode,"DiscR",uptime,DiscR); +// processEventAlarm(devCode,"VibL",uptime,VibL); +// processEventAlarm(devCode,"VibR",uptime,VibR); + //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -197,7 +302,7 @@ if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && gas >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), gas)) { @@ -213,7 +318,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R,alarmFlag?"燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R, alarmFlag ? "燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java index f913775..895d201 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java @@ -89,6 +89,7 @@ String bfcf = busDeviceService.getBfcf(devCode); if (DictEnum.BF_ON.equals(bfcf)) { JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); //获取报警事件 List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); List busWellDTOList = dataGasMapper.getListByDevCode(devCode); @@ -96,25 +97,43 @@ if (busWellDTOList != null && busWellDTOList.size() > 0) { for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 if (!alarmDeviceRuleResponseDTO.isPresent()) continue; //1.查询是否已存在该类报警 if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { @@ -141,6 +160,9 @@ String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); gas = String.format("%.2f", Double.valueOf(gas)); //1.存数据 save(DataTubeOther.builder() @@ -156,6 +178,9 @@ .rsrp(rsrp) .sin(pci) .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) .build());//存储采集数据 //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -186,7 +211,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 98e736b..2288075 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -216,5 +216,15 @@ public ReturnDTO syncDeviceStatus() { return ReturnUtil.success(iBusDeviceService.syncDeviceStatus()); } + + @ApiOperation("根据闸井id获取设备信息") + @PostMapping("/getListByWellId") + @ResponseBody + public ReturnDTO getListByWellId(@RequestBody IdDTO idDTO) { + Assert.isFalse(ObjectUtil.isEmpty(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iBusDeviceService.getListByWellId(idDTO.getId())); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java index 72a2d84..d6d9743 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java @@ -85,6 +85,7 @@ return ReturnUtil.success(iBusLedgerService.detail(idDTO.getId())); } + /** * 同步三级部门 * diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java index 9e412d2..4316b56 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java @@ -1,22 +1,33 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.response.ErrorResponseData; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; +import com.casic.missiles.modular.device.dto.BusPositionImportDTO; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.ReturnUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataAccessException; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; /** @@ -40,8 +51,44 @@ @PostMapping("/addPosition") @ResponseBody public ReturnDTO addPosition(@RequestBody BusLedgerPipe busLedgerPipe) { + + List busLedgerPipeList = iBusLedgerPipeService.getListByNumber(busLedgerPipe.getTagNumber()); + if(busLedgerPipeList!=null&&busLedgerPipeList.size()>0){ + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE,"安装位号已存!!!"); + } + Long id =IdUtil.getSnowflake(1,2).nextId(); + busLedgerPipe.setId(id); iBusLedgerPipeService.save(busLedgerPipe); - return ReturnUtil.success(busLedgerPipe.getId()); + return ReturnUtil.success(id); + } + + @ApiOperation("批量导入") + @RequestMapping(value = "/batchImport", method = RequestMethod.POST) + @ResponseBody + public Object batchImport(@RequestParam("file") MultipartFile file) { + List results = new ArrayList<>(); + try { + results = this.importExcel(BusPositionImportDTO.class, file, null, null); + List list = iBusLedgerPipeService.addPositionBatch(results); + if (!CollectionUtil.isEmpty(list)) { + //获取校验报错信息 + return new ErrorResponseData(list.get(0)); + } + } catch (Exception e) { + return catchMybatisPlusException(e, "导入位置信息失败"); + } + return ResponseData.success(); + } + + private ResponseData catchMybatisPlusException(Exception e, String errorMsg) { + if (e instanceof DataAccessException) { + DataAccessException mybatisPlusException = (DataAccessException) e; + String message = mybatisPlusException.getRootCause().getMessage(); + if (message.contains("Duplicate entry '")) { + return new ErrorResponseData("安装位号重复:" + message.replaceAll("Duplicate entry '", "").replaceAll("' for key 'DEVCODE'", "")); + } + } + return new ErrorResponseData(errorMsg); } @ApiOperation("编辑点位") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java index d1e08a8..d938876 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java @@ -51,6 +51,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getOperatorName()), "CREATE_USER", request.getOperatorName()); queryWrapper.ge(ObjectUtil.isNotEmpty(request.getStartTime()), "START_TIME", request.getStartTime()); queryWrapper.le(ObjectUtil.isNotEmpty(request.getEndTime()), "END_TIME", request.getEndTime()); + queryWrapper.orderByDesc("START_TIME"); return ReturnUtil.success(super.packForBT(iSyncLogService.page(page, queryWrapper))); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java index 5ee5291..23ddee9 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java @@ -73,4 +73,12 @@ " where bd.DEVCODE= #{devcode} and bd.VALID=1 " + ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD asc") List getDeviceTypeRule(@Param("devcode") String devcode); + + + @Select("SELECT bd.* from bus_device bd " + + "left JOIN bus_device_ledger bl on bd.id= bl.DEVICE_ID and bl.VALID=1 " + + "LEFT JOIN bus_ledger_all_view bv on bv.id= bl.LEDGER_ID and bv.type= bl.TYPE and bv.VALID=1 " + + "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") + List getListByWellId(@Param("wellId") Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java index e1d16c4..a4c3f7a 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java @@ -37,7 +37,7 @@ @Select("SELECT b.ORG_ID,b.ORG_CODE,b.ORG_NAME,b.PARENT_ID FROM `bus_sync_org_relation` b WHERE b.DEL_FLAG =0 and b.PARENT_ID = #{syncId} ") List synDept(@Param("syncId") String syncId); - @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view ") + @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view where VALID=1") List getBusLedgers(); @Select("SELECT DEVCODE FROM `bus_device` where VALID>0 ") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml index 99ef10b..c6d1fff 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml @@ -29,6 +29,7 @@ bp.DEVICE_MODEL as deviceModel, bt.TYPE_NAME as typeName, + bp.DATA_SERVICE as deviceCategory, bm.`NAME` as manufactureName, bl.tagNumber as tagNumber, bl.id as ledgerId, @@ -81,6 +82,10 @@ and bd.LOGTIME #{request.logTime2} + + and bp.DATA_SERVICE =#{request.deviceCategory} + + ORDER BY bd.INSTALL_DATE DESC diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml index bdadb6a..d3f4684 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml @@ -40,7 +40,7 @@ `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + AND bdl.VALID = 1 JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -99,8 +99,8 @@ bm.`NAME` as manufactureName FROM `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE - LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID and bdl.type=blp.type + AND bdl.VALID = 1 LEFT JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -117,7 +117,9 @@ @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java new file mode 100644 index 0000000..fc881a1 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.data.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 外协管盯 前端控制器 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RestController +@RequestMapping("/system/dataGasOther") +public class DataGasOtherController { + +} + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java new file mode 100644 index 0000000..b5f3627 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.data.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 外协管盯 Mapper 接口 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Mapper +public interface DataGasOtherMapper extends BaseMapper { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml new file mode 100644 index 0000000..8ce1455 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID, DEVCODE, WELL_CODE, WELL_NUMBER, GASVAL, VBAT, BATSTA, SIN, RSRP, SINR, UPTIME, LOGTIME, SIG, TEMP, SS_STATE + + + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java new file mode 100644 index 0000000..53972ba --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java @@ -0,0 +1,94 @@ +package com.casic.missiles.modular.data.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 外协管盯 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Builder +@Data +@TableName("data_gas_other") +@ApiModel(value = "DataGasOther对象", description = "外协管盯") +public class DataGasOther implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId("ID") + private Long id; + + @ApiModelProperty("设备编号") + @TableField("DEVCODE") + private String devcode; + + @ApiModelProperty("点位编号") + @TableField("WELL_CODE") + private String wellCode; + + @ApiModelProperty("位号") + @TableField("WELL_NUMBER") + private String wellNumber; + + @ApiModelProperty("气体浓度采样值") + @TableField("GASVAL") + private String gasval; + + @ApiModelProperty("设备电池电压值(毫伏)") + @TableField("VBAT") + private String vbat; + + @ApiModelProperty("电池状态0 正常、 1 低电告警、2 关机") + @TableField("BATSTA") + private String batsta; + + @ApiModelProperty("接收信号强度等级") + @TableField("SIN") + private String sin; + + @ApiModelProperty("接收信号参考质量 服务小 区的 RSRP 值") + @TableField("RSRP") + private String rsrp; + + @ApiModelProperty("信噪比") + @TableField("SINR") + private String sinr; + + @ApiModelProperty("采集时间") + @TableField("UPTIME") + private Date uptime; + + @ApiModelProperty("上传时间") + @TableField("LOGTIME") + private Date logtime; + + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态,0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java index 86077b8..f4d4417 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java @@ -76,4 +76,17 @@ private Date logtime; + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态:0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java new file mode 100644 index 0000000..842ca0b --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.data.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.data.entity.DataGasOther; + +/** + *

+ * 外协管盯 服务类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +public interface IDataGasOtherService extends IService { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java new file mode 100644 index 0000000..4c660e9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java @@ -0,0 +1,226 @@ +package com.casic.missiles.modular.data.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.enums.DeviceTypeEnum; +import com.casic.missiles.enums.DictEnum; +import com.casic.missiles.modular.alarm.dto.AlarmDeviceRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.AlarmRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.BusAlarmLedgerDTO; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.data.dao.DataGasMapper; +import com.casic.missiles.modular.data.dao.DataGasOtherMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import com.casic.missiles.modular.data.entity.DataTubeOther; +import com.casic.missiles.modular.data.service.IDataAbstractService; +import com.casic.missiles.modular.data.service.IDataGasOtherService; +import com.casic.missiles.modular.data.service.ITrackLogService; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Optional; + +/** + *

+ * 外协管盯 服务实现类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RequiredArgsConstructor +@Service +public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { + + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + private final DataGasMapper dataGasMapper; + private final IAlarmRecordsService alarmRecordsService; + private final IAlarmRuleService alarmRuleService; + private final ITrackLogService iTrackLogService; + private final IBusDeviceService busDeviceService; + + @Override + public void process(String dataContent) { + + //解析数据+根据业务处理存储数据 + JSONObject json = JSONObject.parseObject(dataContent); + String devCode = json.get("devCode").toString(); + JSONObject jsonObject = json.getJSONObject("mBody"); + if (mType[0].equals(json.get("mType")) || mType[3].equals(json.get("mType"))) {//存储上报数据 + this.processNormalData(jsonObject, devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + this.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.TubeOther.name().equals(json.get("devType"))) { + if ("TubeOtherConfigSuccess".equals(jsonObject.get("bType"))) { +// deviceConfigManager.updateStatus(devCode); + } + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } else if (mType[4].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); +// imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; + try { + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); + } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + } + } + + @Transactional + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.getString("cell"); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = jsonObject.getJSONArray("datas"); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + String bfcf = busDeviceService.getBfcf(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).getString("gasval"); + String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); + String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); + String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataGasOther.builder() + .wellCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .wellNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .devcode(devCode) +// .cell(cell) + .gasval(gas) + .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime))) + .logtime(new Date()) + .vbat(vbat) + .batsta(batsta) + .rsrp(rsrp) + .sin(pci) + .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) + .build());//存储采集数据 + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) continue; + + //3.清除设备告警 + alarmRecordsService.cancelDeviceAlarm(devCode); + //4.存报警 + //若没绑定井,则不产生报警 + boolean alarmFlag = false; + if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { + //获取报警规则 + List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); + for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { + if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && + Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { + alarmFlag = true; + //写入报警 + //1、判断报警是否已存在 + if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.TubeOther.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); + //7.更新管线状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java index d248540..b33a1ee 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java @@ -91,7 +91,6 @@ } - public List getBusAlarmLedgerList(String devCode) { return this.dataGasMapper.getListByDevCode(devCode); } @@ -113,6 +112,13 @@ for (int i = 0; i < jsonArray.size(); i++) { try { String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) .findFirst(); @@ -175,18 +181,18 @@ alarmRecordsService.cancelDeviceAlarm(devCode); //4.存报警 //若没绑定井,则不产生报警 - boolean alarmFlag = false; + boolean alarmFlag = false; if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { //获取报警规则 List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { - alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); } break; } @@ -197,7 +203,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及设备状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新监测井状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java index e848fce..6297093 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java @@ -84,42 +84,78 @@ } - @Transactional - public void processAlarmData(JSONObject jsonObject, String devCode) { - JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + public void processEventAlarm(String devCode, String eventTypeCode, String logTime, String eventValue) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - //获取报警事件 - List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - - List busWellDTOList = dataGasMapper.getListByDevCode(devCode); - //若没绑定井,则不产生报警 - if (busWellDTOList != null && busWellDTOList.size() > 0) { - - for (int i = 0; i < jsonArray.size(); i++) { + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + //特殊处理消警 + if ("0".equals(eventValue)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, eventTypeCode); + } + return; } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> eventTypeCode.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 - if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + if (!alarmDeviceRuleResponseDTO.isPresent()) return; //1.查询是否已存在该类报警 - if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) return; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); - - + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + } + } + } + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + try { + String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmEventCode)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } } } } @@ -169,7 +205,76 @@ .rightVibrateAlarm(VibR) .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(uptime))) .logtime(new Date()) - .build());//存储采集数据 + .build()); + + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + ruleResponseDTOList.forEach(ruleResponseDTO -> { + + if ("Sloping".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Sloping)&&(!alarmRecordsService.isWatchAlarms(devCode,"Sloping"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Sloping", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Sloping)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Sloping"); + + } + } + if ("Destroy".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Destroy)&&(!alarmRecordsService.isWatchAlarms(devCode,"Destroy"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Destroy", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Destroy)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Destroy"); + + } + } + if ("Leak".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Leak)&&(!alarmRecordsService.isWatchAlarms(devCode,"Leak"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Leak", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Leak)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Leak"); + + } + } + if ("DiscL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscL)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscL"); + + } + } + if ("DiscR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscR)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscR"); + } + } + + if ("VibL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibL)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibL"); + } + } + if ("VibR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibR)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibR"); + } + } + }); + +// //处理报警事件 +// processEventAlarm(devCode,"Sloping",uptime,Sloping); +// processEventAlarm(devCode,"Destroy",uptime,Destroy); +// processEventAlarm(devCode,"Leak",uptime,Leak); +// processEventAlarm(devCode,"DiscL",uptime,DiscL); +// processEventAlarm(devCode,"DiscR",uptime,DiscR); +// processEventAlarm(devCode,"VibL",uptime,VibL); +// processEventAlarm(devCode,"VibR",uptime,VibR); + //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -197,7 +302,7 @@ if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && gas >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), gas)) { @@ -213,7 +318,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R,alarmFlag?"燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R, alarmFlag ? "燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java index f913775..895d201 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java @@ -89,6 +89,7 @@ String bfcf = busDeviceService.getBfcf(devCode); if (DictEnum.BF_ON.equals(bfcf)) { JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); //获取报警事件 List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); List busWellDTOList = dataGasMapper.getListByDevCode(devCode); @@ -96,25 +97,43 @@ if (busWellDTOList != null && busWellDTOList.size() > 0) { for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 if (!alarmDeviceRuleResponseDTO.isPresent()) continue; //1.查询是否已存在该类报警 if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { @@ -141,6 +160,9 @@ String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); gas = String.format("%.2f", Double.valueOf(gas)); //1.存数据 save(DataTubeOther.builder() @@ -156,6 +178,9 @@ .rsrp(rsrp) .sin(pci) .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) .build());//存储采集数据 //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -186,7 +211,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 98e736b..2288075 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -216,5 +216,15 @@ public ReturnDTO syncDeviceStatus() { return ReturnUtil.success(iBusDeviceService.syncDeviceStatus()); } + + @ApiOperation("根据闸井id获取设备信息") + @PostMapping("/getListByWellId") + @ResponseBody + public ReturnDTO getListByWellId(@RequestBody IdDTO idDTO) { + Assert.isFalse(ObjectUtil.isEmpty(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iBusDeviceService.getListByWellId(idDTO.getId())); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java index 72a2d84..d6d9743 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java @@ -85,6 +85,7 @@ return ReturnUtil.success(iBusLedgerService.detail(idDTO.getId())); } + /** * 同步三级部门 * diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java index 9e412d2..4316b56 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java @@ -1,22 +1,33 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.response.ErrorResponseData; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; +import com.casic.missiles.modular.device.dto.BusPositionImportDTO; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.ReturnUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataAccessException; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; /** @@ -40,8 +51,44 @@ @PostMapping("/addPosition") @ResponseBody public ReturnDTO addPosition(@RequestBody BusLedgerPipe busLedgerPipe) { + + List busLedgerPipeList = iBusLedgerPipeService.getListByNumber(busLedgerPipe.getTagNumber()); + if(busLedgerPipeList!=null&&busLedgerPipeList.size()>0){ + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE,"安装位号已存!!!"); + } + Long id =IdUtil.getSnowflake(1,2).nextId(); + busLedgerPipe.setId(id); iBusLedgerPipeService.save(busLedgerPipe); - return ReturnUtil.success(busLedgerPipe.getId()); + return ReturnUtil.success(id); + } + + @ApiOperation("批量导入") + @RequestMapping(value = "/batchImport", method = RequestMethod.POST) + @ResponseBody + public Object batchImport(@RequestParam("file") MultipartFile file) { + List results = new ArrayList<>(); + try { + results = this.importExcel(BusPositionImportDTO.class, file, null, null); + List list = iBusLedgerPipeService.addPositionBatch(results); + if (!CollectionUtil.isEmpty(list)) { + //获取校验报错信息 + return new ErrorResponseData(list.get(0)); + } + } catch (Exception e) { + return catchMybatisPlusException(e, "导入位置信息失败"); + } + return ResponseData.success(); + } + + private ResponseData catchMybatisPlusException(Exception e, String errorMsg) { + if (e instanceof DataAccessException) { + DataAccessException mybatisPlusException = (DataAccessException) e; + String message = mybatisPlusException.getRootCause().getMessage(); + if (message.contains("Duplicate entry '")) { + return new ErrorResponseData("安装位号重复:" + message.replaceAll("Duplicate entry '", "").replaceAll("' for key 'DEVCODE'", "")); + } + } + return new ErrorResponseData(errorMsg); } @ApiOperation("编辑点位") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java index d1e08a8..d938876 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java @@ -51,6 +51,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getOperatorName()), "CREATE_USER", request.getOperatorName()); queryWrapper.ge(ObjectUtil.isNotEmpty(request.getStartTime()), "START_TIME", request.getStartTime()); queryWrapper.le(ObjectUtil.isNotEmpty(request.getEndTime()), "END_TIME", request.getEndTime()); + queryWrapper.orderByDesc("START_TIME"); return ReturnUtil.success(super.packForBT(iSyncLogService.page(page, queryWrapper))); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java index 5ee5291..23ddee9 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java @@ -73,4 +73,12 @@ " where bd.DEVCODE= #{devcode} and bd.VALID=1 " + ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD asc") List getDeviceTypeRule(@Param("devcode") String devcode); + + + @Select("SELECT bd.* from bus_device bd " + + "left JOIN bus_device_ledger bl on bd.id= bl.DEVICE_ID and bl.VALID=1 " + + "LEFT JOIN bus_ledger_all_view bv on bv.id= bl.LEDGER_ID and bv.type= bl.TYPE and bv.VALID=1 " + + "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") + List getListByWellId(@Param("wellId") Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java index e1d16c4..a4c3f7a 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java @@ -37,7 +37,7 @@ @Select("SELECT b.ORG_ID,b.ORG_CODE,b.ORG_NAME,b.PARENT_ID FROM `bus_sync_org_relation` b WHERE b.DEL_FLAG =0 and b.PARENT_ID = #{syncId} ") List synDept(@Param("syncId") String syncId); - @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view ") + @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view where VALID=1") List getBusLedgers(); @Select("SELECT DEVCODE FROM `bus_device` where VALID>0 ") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml index 99ef10b..c6d1fff 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml @@ -29,6 +29,7 @@ bp.DEVICE_MODEL as deviceModel, bt.TYPE_NAME as typeName, + bp.DATA_SERVICE as deviceCategory, bm.`NAME` as manufactureName, bl.tagNumber as tagNumber, bl.id as ledgerId, @@ -81,6 +82,10 @@ and bd.LOGTIME #{request.logTime2} + + and bp.DATA_SERVICE =#{request.deviceCategory} + + ORDER BY bd.INSTALL_DATE DESC diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml index bdadb6a..d3f4684 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml @@ -40,7 +40,7 @@ `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + AND bdl.VALID = 1 JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -99,8 +99,8 @@ bm.`NAME` as manufactureName FROM `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE - LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID and bdl.type=blp.type + AND bdl.VALID = 1 LEFT JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -117,7 +117,9 @@ WITH station_temp as(SELECT bl.ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID FROM `bus_ledger` bl where bl.VALID=1 and bl.TYPE =2) - select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME from station_temp bl + select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME,bd.DEVCODE from station_temp bl left join bus_device_ledger bdl on bdl.LEDGER_ID = bl.ID and bdl.TYPE =2 and bdl.valid=1 left join bus_device bd on bd.id= bdl.DEVICE_ID and bd.VALID=1 order by bl.ID diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java new file mode 100644 index 0000000..fc881a1 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.data.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 外协管盯 前端控制器 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RestController +@RequestMapping("/system/dataGasOther") +public class DataGasOtherController { + +} + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java new file mode 100644 index 0000000..b5f3627 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.data.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 外协管盯 Mapper 接口 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Mapper +public interface DataGasOtherMapper extends BaseMapper { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml new file mode 100644 index 0000000..8ce1455 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID, DEVCODE, WELL_CODE, WELL_NUMBER, GASVAL, VBAT, BATSTA, SIN, RSRP, SINR, UPTIME, LOGTIME, SIG, TEMP, SS_STATE + + + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java new file mode 100644 index 0000000..53972ba --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java @@ -0,0 +1,94 @@ +package com.casic.missiles.modular.data.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 外协管盯 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Builder +@Data +@TableName("data_gas_other") +@ApiModel(value = "DataGasOther对象", description = "外协管盯") +public class DataGasOther implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId("ID") + private Long id; + + @ApiModelProperty("设备编号") + @TableField("DEVCODE") + private String devcode; + + @ApiModelProperty("点位编号") + @TableField("WELL_CODE") + private String wellCode; + + @ApiModelProperty("位号") + @TableField("WELL_NUMBER") + private String wellNumber; + + @ApiModelProperty("气体浓度采样值") + @TableField("GASVAL") + private String gasval; + + @ApiModelProperty("设备电池电压值(毫伏)") + @TableField("VBAT") + private String vbat; + + @ApiModelProperty("电池状态0 正常、 1 低电告警、2 关机") + @TableField("BATSTA") + private String batsta; + + @ApiModelProperty("接收信号强度等级") + @TableField("SIN") + private String sin; + + @ApiModelProperty("接收信号参考质量 服务小 区的 RSRP 值") + @TableField("RSRP") + private String rsrp; + + @ApiModelProperty("信噪比") + @TableField("SINR") + private String sinr; + + @ApiModelProperty("采集时间") + @TableField("UPTIME") + private Date uptime; + + @ApiModelProperty("上传时间") + @TableField("LOGTIME") + private Date logtime; + + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态,0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java index 86077b8..f4d4417 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java @@ -76,4 +76,17 @@ private Date logtime; + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态:0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java new file mode 100644 index 0000000..842ca0b --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.data.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.data.entity.DataGasOther; + +/** + *

+ * 外协管盯 服务类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +public interface IDataGasOtherService extends IService { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java new file mode 100644 index 0000000..4c660e9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java @@ -0,0 +1,226 @@ +package com.casic.missiles.modular.data.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.enums.DeviceTypeEnum; +import com.casic.missiles.enums.DictEnum; +import com.casic.missiles.modular.alarm.dto.AlarmDeviceRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.AlarmRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.BusAlarmLedgerDTO; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.data.dao.DataGasMapper; +import com.casic.missiles.modular.data.dao.DataGasOtherMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import com.casic.missiles.modular.data.entity.DataTubeOther; +import com.casic.missiles.modular.data.service.IDataAbstractService; +import com.casic.missiles.modular.data.service.IDataGasOtherService; +import com.casic.missiles.modular.data.service.ITrackLogService; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Optional; + +/** + *

+ * 外协管盯 服务实现类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RequiredArgsConstructor +@Service +public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { + + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + private final DataGasMapper dataGasMapper; + private final IAlarmRecordsService alarmRecordsService; + private final IAlarmRuleService alarmRuleService; + private final ITrackLogService iTrackLogService; + private final IBusDeviceService busDeviceService; + + @Override + public void process(String dataContent) { + + //解析数据+根据业务处理存储数据 + JSONObject json = JSONObject.parseObject(dataContent); + String devCode = json.get("devCode").toString(); + JSONObject jsonObject = json.getJSONObject("mBody"); + if (mType[0].equals(json.get("mType")) || mType[3].equals(json.get("mType"))) {//存储上报数据 + this.processNormalData(jsonObject, devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + this.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.TubeOther.name().equals(json.get("devType"))) { + if ("TubeOtherConfigSuccess".equals(jsonObject.get("bType"))) { +// deviceConfigManager.updateStatus(devCode); + } + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } else if (mType[4].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); +// imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; + try { + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); + } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + } + } + + @Transactional + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.getString("cell"); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = jsonObject.getJSONArray("datas"); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + String bfcf = busDeviceService.getBfcf(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).getString("gasval"); + String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); + String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); + String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataGasOther.builder() + .wellCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .wellNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .devcode(devCode) +// .cell(cell) + .gasval(gas) + .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime))) + .logtime(new Date()) + .vbat(vbat) + .batsta(batsta) + .rsrp(rsrp) + .sin(pci) + .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) + .build());//存储采集数据 + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) continue; + + //3.清除设备告警 + alarmRecordsService.cancelDeviceAlarm(devCode); + //4.存报警 + //若没绑定井,则不产生报警 + boolean alarmFlag = false; + if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { + //获取报警规则 + List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); + for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { + if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && + Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { + alarmFlag = true; + //写入报警 + //1、判断报警是否已存在 + if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.TubeOther.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); + //7.更新管线状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java index d248540..b33a1ee 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java @@ -91,7 +91,6 @@ } - public List getBusAlarmLedgerList(String devCode) { return this.dataGasMapper.getListByDevCode(devCode); } @@ -113,6 +112,13 @@ for (int i = 0; i < jsonArray.size(); i++) { try { String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) .findFirst(); @@ -175,18 +181,18 @@ alarmRecordsService.cancelDeviceAlarm(devCode); //4.存报警 //若没绑定井,则不产生报警 - boolean alarmFlag = false; + boolean alarmFlag = false; if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { //获取报警规则 List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { - alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); } break; } @@ -197,7 +203,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及设备状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新监测井状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java index e848fce..6297093 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java @@ -84,42 +84,78 @@ } - @Transactional - public void processAlarmData(JSONObject jsonObject, String devCode) { - JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + public void processEventAlarm(String devCode, String eventTypeCode, String logTime, String eventValue) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - //获取报警事件 - List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - - List busWellDTOList = dataGasMapper.getListByDevCode(devCode); - //若没绑定井,则不产生报警 - if (busWellDTOList != null && busWellDTOList.size() > 0) { - - for (int i = 0; i < jsonArray.size(); i++) { + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + //特殊处理消警 + if ("0".equals(eventValue)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, eventTypeCode); + } + return; } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> eventTypeCode.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 - if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + if (!alarmDeviceRuleResponseDTO.isPresent()) return; //1.查询是否已存在该类报警 - if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) return; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); - - + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + } + } + } + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + try { + String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmEventCode)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } } } } @@ -169,7 +205,76 @@ .rightVibrateAlarm(VibR) .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(uptime))) .logtime(new Date()) - .build());//存储采集数据 + .build()); + + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + ruleResponseDTOList.forEach(ruleResponseDTO -> { + + if ("Sloping".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Sloping)&&(!alarmRecordsService.isWatchAlarms(devCode,"Sloping"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Sloping", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Sloping)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Sloping"); + + } + } + if ("Destroy".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Destroy)&&(!alarmRecordsService.isWatchAlarms(devCode,"Destroy"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Destroy", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Destroy)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Destroy"); + + } + } + if ("Leak".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Leak)&&(!alarmRecordsService.isWatchAlarms(devCode,"Leak"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Leak", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Leak)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Leak"); + + } + } + if ("DiscL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscL)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscL"); + + } + } + if ("DiscR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscR)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscR"); + } + } + + if ("VibL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibL)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibL"); + } + } + if ("VibR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibR)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibR"); + } + } + }); + +// //处理报警事件 +// processEventAlarm(devCode,"Sloping",uptime,Sloping); +// processEventAlarm(devCode,"Destroy",uptime,Destroy); +// processEventAlarm(devCode,"Leak",uptime,Leak); +// processEventAlarm(devCode,"DiscL",uptime,DiscL); +// processEventAlarm(devCode,"DiscR",uptime,DiscR); +// processEventAlarm(devCode,"VibL",uptime,VibL); +// processEventAlarm(devCode,"VibR",uptime,VibR); + //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -197,7 +302,7 @@ if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && gas >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), gas)) { @@ -213,7 +318,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R,alarmFlag?"燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R, alarmFlag ? "燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java index f913775..895d201 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java @@ -89,6 +89,7 @@ String bfcf = busDeviceService.getBfcf(devCode); if (DictEnum.BF_ON.equals(bfcf)) { JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); //获取报警事件 List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); List busWellDTOList = dataGasMapper.getListByDevCode(devCode); @@ -96,25 +97,43 @@ if (busWellDTOList != null && busWellDTOList.size() > 0) { for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 if (!alarmDeviceRuleResponseDTO.isPresent()) continue; //1.查询是否已存在该类报警 if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { @@ -141,6 +160,9 @@ String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); gas = String.format("%.2f", Double.valueOf(gas)); //1.存数据 save(DataTubeOther.builder() @@ -156,6 +178,9 @@ .rsrp(rsrp) .sin(pci) .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) .build());//存储采集数据 //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -186,7 +211,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 98e736b..2288075 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -216,5 +216,15 @@ public ReturnDTO syncDeviceStatus() { return ReturnUtil.success(iBusDeviceService.syncDeviceStatus()); } + + @ApiOperation("根据闸井id获取设备信息") + @PostMapping("/getListByWellId") + @ResponseBody + public ReturnDTO getListByWellId(@RequestBody IdDTO idDTO) { + Assert.isFalse(ObjectUtil.isEmpty(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iBusDeviceService.getListByWellId(idDTO.getId())); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java index 72a2d84..d6d9743 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java @@ -85,6 +85,7 @@ return ReturnUtil.success(iBusLedgerService.detail(idDTO.getId())); } + /** * 同步三级部门 * diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java index 9e412d2..4316b56 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java @@ -1,22 +1,33 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.response.ErrorResponseData; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; +import com.casic.missiles.modular.device.dto.BusPositionImportDTO; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.ReturnUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataAccessException; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; /** @@ -40,8 +51,44 @@ @PostMapping("/addPosition") @ResponseBody public ReturnDTO addPosition(@RequestBody BusLedgerPipe busLedgerPipe) { + + List busLedgerPipeList = iBusLedgerPipeService.getListByNumber(busLedgerPipe.getTagNumber()); + if(busLedgerPipeList!=null&&busLedgerPipeList.size()>0){ + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE,"安装位号已存!!!"); + } + Long id =IdUtil.getSnowflake(1,2).nextId(); + busLedgerPipe.setId(id); iBusLedgerPipeService.save(busLedgerPipe); - return ReturnUtil.success(busLedgerPipe.getId()); + return ReturnUtil.success(id); + } + + @ApiOperation("批量导入") + @RequestMapping(value = "/batchImport", method = RequestMethod.POST) + @ResponseBody + public Object batchImport(@RequestParam("file") MultipartFile file) { + List results = new ArrayList<>(); + try { + results = this.importExcel(BusPositionImportDTO.class, file, null, null); + List list = iBusLedgerPipeService.addPositionBatch(results); + if (!CollectionUtil.isEmpty(list)) { + //获取校验报错信息 + return new ErrorResponseData(list.get(0)); + } + } catch (Exception e) { + return catchMybatisPlusException(e, "导入位置信息失败"); + } + return ResponseData.success(); + } + + private ResponseData catchMybatisPlusException(Exception e, String errorMsg) { + if (e instanceof DataAccessException) { + DataAccessException mybatisPlusException = (DataAccessException) e; + String message = mybatisPlusException.getRootCause().getMessage(); + if (message.contains("Duplicate entry '")) { + return new ErrorResponseData("安装位号重复:" + message.replaceAll("Duplicate entry '", "").replaceAll("' for key 'DEVCODE'", "")); + } + } + return new ErrorResponseData(errorMsg); } @ApiOperation("编辑点位") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java index d1e08a8..d938876 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java @@ -51,6 +51,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getOperatorName()), "CREATE_USER", request.getOperatorName()); queryWrapper.ge(ObjectUtil.isNotEmpty(request.getStartTime()), "START_TIME", request.getStartTime()); queryWrapper.le(ObjectUtil.isNotEmpty(request.getEndTime()), "END_TIME", request.getEndTime()); + queryWrapper.orderByDesc("START_TIME"); return ReturnUtil.success(super.packForBT(iSyncLogService.page(page, queryWrapper))); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java index 5ee5291..23ddee9 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java @@ -73,4 +73,12 @@ " where bd.DEVCODE= #{devcode} and bd.VALID=1 " + ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD asc") List getDeviceTypeRule(@Param("devcode") String devcode); + + + @Select("SELECT bd.* from bus_device bd " + + "left JOIN bus_device_ledger bl on bd.id= bl.DEVICE_ID and bl.VALID=1 " + + "LEFT JOIN bus_ledger_all_view bv on bv.id= bl.LEDGER_ID and bv.type= bl.TYPE and bv.VALID=1 " + + "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") + List getListByWellId(@Param("wellId") Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java index e1d16c4..a4c3f7a 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java @@ -37,7 +37,7 @@ @Select("SELECT b.ORG_ID,b.ORG_CODE,b.ORG_NAME,b.PARENT_ID FROM `bus_sync_org_relation` b WHERE b.DEL_FLAG =0 and b.PARENT_ID = #{syncId} ") List synDept(@Param("syncId") String syncId); - @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view ") + @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view where VALID=1") List getBusLedgers(); @Select("SELECT DEVCODE FROM `bus_device` where VALID>0 ") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml index 99ef10b..c6d1fff 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml @@ -29,6 +29,7 @@ bp.DEVICE_MODEL as deviceModel, bt.TYPE_NAME as typeName, + bp.DATA_SERVICE as deviceCategory, bm.`NAME` as manufactureName, bl.tagNumber as tagNumber, bl.id as ledgerId, @@ -81,6 +82,10 @@ and bd.LOGTIME #{request.logTime2} + + and bp.DATA_SERVICE =#{request.deviceCategory} + + ORDER BY bd.INSTALL_DATE DESC diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml index bdadb6a..d3f4684 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml @@ -40,7 +40,7 @@ `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + AND bdl.VALID = 1 JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -99,8 +99,8 @@ bm.`NAME` as manufactureName FROM `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE - LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID and bdl.type=blp.type + AND bdl.VALID = 1 LEFT JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -117,7 +117,9 @@ WITH station_temp as(SELECT bl.ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID FROM `bus_ledger` bl where bl.VALID=1 and bl.TYPE =2) - select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME from station_temp bl + select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME,bd.DEVCODE from station_temp bl left join bus_device_ledger bdl on bdl.LEDGER_ID = bl.ID and bdl.TYPE =2 and bdl.valid=1 left join bus_device bd on bd.id= bdl.DEVICE_ID and bd.VALID=1 order by bl.ID diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml index 7b92b04..1d97c64 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml @@ -184,7 +184,7 @@ WHERE EQ_LOCNO like 'N%' and - EQ_CATEGORY in (1,3) + EQ_CATEGORY in (1,2,3,5) diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java new file mode 100644 index 0000000..fc881a1 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.data.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 外协管盯 前端控制器 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RestController +@RequestMapping("/system/dataGasOther") +public class DataGasOtherController { + +} + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java new file mode 100644 index 0000000..b5f3627 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.data.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 外协管盯 Mapper 接口 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Mapper +public interface DataGasOtherMapper extends BaseMapper { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml new file mode 100644 index 0000000..8ce1455 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID, DEVCODE, WELL_CODE, WELL_NUMBER, GASVAL, VBAT, BATSTA, SIN, RSRP, SINR, UPTIME, LOGTIME, SIG, TEMP, SS_STATE + + + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java new file mode 100644 index 0000000..53972ba --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java @@ -0,0 +1,94 @@ +package com.casic.missiles.modular.data.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 外协管盯 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Builder +@Data +@TableName("data_gas_other") +@ApiModel(value = "DataGasOther对象", description = "外协管盯") +public class DataGasOther implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId("ID") + private Long id; + + @ApiModelProperty("设备编号") + @TableField("DEVCODE") + private String devcode; + + @ApiModelProperty("点位编号") + @TableField("WELL_CODE") + private String wellCode; + + @ApiModelProperty("位号") + @TableField("WELL_NUMBER") + private String wellNumber; + + @ApiModelProperty("气体浓度采样值") + @TableField("GASVAL") + private String gasval; + + @ApiModelProperty("设备电池电压值(毫伏)") + @TableField("VBAT") + private String vbat; + + @ApiModelProperty("电池状态0 正常、 1 低电告警、2 关机") + @TableField("BATSTA") + private String batsta; + + @ApiModelProperty("接收信号强度等级") + @TableField("SIN") + private String sin; + + @ApiModelProperty("接收信号参考质量 服务小 区的 RSRP 值") + @TableField("RSRP") + private String rsrp; + + @ApiModelProperty("信噪比") + @TableField("SINR") + private String sinr; + + @ApiModelProperty("采集时间") + @TableField("UPTIME") + private Date uptime; + + @ApiModelProperty("上传时间") + @TableField("LOGTIME") + private Date logtime; + + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态,0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java index 86077b8..f4d4417 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java @@ -76,4 +76,17 @@ private Date logtime; + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态:0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java new file mode 100644 index 0000000..842ca0b --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.data.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.data.entity.DataGasOther; + +/** + *

+ * 外协管盯 服务类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +public interface IDataGasOtherService extends IService { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java new file mode 100644 index 0000000..4c660e9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java @@ -0,0 +1,226 @@ +package com.casic.missiles.modular.data.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.enums.DeviceTypeEnum; +import com.casic.missiles.enums.DictEnum; +import com.casic.missiles.modular.alarm.dto.AlarmDeviceRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.AlarmRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.BusAlarmLedgerDTO; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.data.dao.DataGasMapper; +import com.casic.missiles.modular.data.dao.DataGasOtherMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import com.casic.missiles.modular.data.entity.DataTubeOther; +import com.casic.missiles.modular.data.service.IDataAbstractService; +import com.casic.missiles.modular.data.service.IDataGasOtherService; +import com.casic.missiles.modular.data.service.ITrackLogService; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Optional; + +/** + *

+ * 外协管盯 服务实现类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RequiredArgsConstructor +@Service +public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { + + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + private final DataGasMapper dataGasMapper; + private final IAlarmRecordsService alarmRecordsService; + private final IAlarmRuleService alarmRuleService; + private final ITrackLogService iTrackLogService; + private final IBusDeviceService busDeviceService; + + @Override + public void process(String dataContent) { + + //解析数据+根据业务处理存储数据 + JSONObject json = JSONObject.parseObject(dataContent); + String devCode = json.get("devCode").toString(); + JSONObject jsonObject = json.getJSONObject("mBody"); + if (mType[0].equals(json.get("mType")) || mType[3].equals(json.get("mType"))) {//存储上报数据 + this.processNormalData(jsonObject, devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + this.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.TubeOther.name().equals(json.get("devType"))) { + if ("TubeOtherConfigSuccess".equals(jsonObject.get("bType"))) { +// deviceConfigManager.updateStatus(devCode); + } + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } else if (mType[4].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); +// imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; + try { + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); + } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + } + } + + @Transactional + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.getString("cell"); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = jsonObject.getJSONArray("datas"); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + String bfcf = busDeviceService.getBfcf(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).getString("gasval"); + String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); + String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); + String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataGasOther.builder() + .wellCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .wellNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .devcode(devCode) +// .cell(cell) + .gasval(gas) + .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime))) + .logtime(new Date()) + .vbat(vbat) + .batsta(batsta) + .rsrp(rsrp) + .sin(pci) + .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) + .build());//存储采集数据 + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) continue; + + //3.清除设备告警 + alarmRecordsService.cancelDeviceAlarm(devCode); + //4.存报警 + //若没绑定井,则不产生报警 + boolean alarmFlag = false; + if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { + //获取报警规则 + List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); + for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { + if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && + Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { + alarmFlag = true; + //写入报警 + //1、判断报警是否已存在 + if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.TubeOther.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); + //7.更新管线状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java index d248540..b33a1ee 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java @@ -91,7 +91,6 @@ } - public List getBusAlarmLedgerList(String devCode) { return this.dataGasMapper.getListByDevCode(devCode); } @@ -113,6 +112,13 @@ for (int i = 0; i < jsonArray.size(); i++) { try { String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) .findFirst(); @@ -175,18 +181,18 @@ alarmRecordsService.cancelDeviceAlarm(devCode); //4.存报警 //若没绑定井,则不产生报警 - boolean alarmFlag = false; + boolean alarmFlag = false; if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { //获取报警规则 List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { - alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); } break; } @@ -197,7 +203,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及设备状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新监测井状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java index e848fce..6297093 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java @@ -84,42 +84,78 @@ } - @Transactional - public void processAlarmData(JSONObject jsonObject, String devCode) { - JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + public void processEventAlarm(String devCode, String eventTypeCode, String logTime, String eventValue) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - //获取报警事件 - List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - - List busWellDTOList = dataGasMapper.getListByDevCode(devCode); - //若没绑定井,则不产生报警 - if (busWellDTOList != null && busWellDTOList.size() > 0) { - - for (int i = 0; i < jsonArray.size(); i++) { + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + //特殊处理消警 + if ("0".equals(eventValue)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, eventTypeCode); + } + return; } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> eventTypeCode.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 - if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + if (!alarmDeviceRuleResponseDTO.isPresent()) return; //1.查询是否已存在该类报警 - if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) return; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); - - + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + } + } + } + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + try { + String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmEventCode)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } } } } @@ -169,7 +205,76 @@ .rightVibrateAlarm(VibR) .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(uptime))) .logtime(new Date()) - .build());//存储采集数据 + .build()); + + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + ruleResponseDTOList.forEach(ruleResponseDTO -> { + + if ("Sloping".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Sloping)&&(!alarmRecordsService.isWatchAlarms(devCode,"Sloping"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Sloping", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Sloping)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Sloping"); + + } + } + if ("Destroy".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Destroy)&&(!alarmRecordsService.isWatchAlarms(devCode,"Destroy"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Destroy", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Destroy)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Destroy"); + + } + } + if ("Leak".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Leak)&&(!alarmRecordsService.isWatchAlarms(devCode,"Leak"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Leak", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Leak)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Leak"); + + } + } + if ("DiscL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscL)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscL"); + + } + } + if ("DiscR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscR)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscR"); + } + } + + if ("VibL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibL)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibL"); + } + } + if ("VibR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibR)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibR"); + } + } + }); + +// //处理报警事件 +// processEventAlarm(devCode,"Sloping",uptime,Sloping); +// processEventAlarm(devCode,"Destroy",uptime,Destroy); +// processEventAlarm(devCode,"Leak",uptime,Leak); +// processEventAlarm(devCode,"DiscL",uptime,DiscL); +// processEventAlarm(devCode,"DiscR",uptime,DiscR); +// processEventAlarm(devCode,"VibL",uptime,VibL); +// processEventAlarm(devCode,"VibR",uptime,VibR); + //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -197,7 +302,7 @@ if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && gas >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), gas)) { @@ -213,7 +318,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R,alarmFlag?"燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R, alarmFlag ? "燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java index f913775..895d201 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java @@ -89,6 +89,7 @@ String bfcf = busDeviceService.getBfcf(devCode); if (DictEnum.BF_ON.equals(bfcf)) { JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); //获取报警事件 List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); List busWellDTOList = dataGasMapper.getListByDevCode(devCode); @@ -96,25 +97,43 @@ if (busWellDTOList != null && busWellDTOList.size() > 0) { for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 if (!alarmDeviceRuleResponseDTO.isPresent()) continue; //1.查询是否已存在该类报警 if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { @@ -141,6 +160,9 @@ String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); gas = String.format("%.2f", Double.valueOf(gas)); //1.存数据 save(DataTubeOther.builder() @@ -156,6 +178,9 @@ .rsrp(rsrp) .sin(pci) .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) .build());//存储采集数据 //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -186,7 +211,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 98e736b..2288075 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -216,5 +216,15 @@ public ReturnDTO syncDeviceStatus() { return ReturnUtil.success(iBusDeviceService.syncDeviceStatus()); } + + @ApiOperation("根据闸井id获取设备信息") + @PostMapping("/getListByWellId") + @ResponseBody + public ReturnDTO getListByWellId(@RequestBody IdDTO idDTO) { + Assert.isFalse(ObjectUtil.isEmpty(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iBusDeviceService.getListByWellId(idDTO.getId())); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java index 72a2d84..d6d9743 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java @@ -85,6 +85,7 @@ return ReturnUtil.success(iBusLedgerService.detail(idDTO.getId())); } + /** * 同步三级部门 * diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java index 9e412d2..4316b56 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java @@ -1,22 +1,33 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.response.ErrorResponseData; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; +import com.casic.missiles.modular.device.dto.BusPositionImportDTO; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.ReturnUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataAccessException; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; /** @@ -40,8 +51,44 @@ @PostMapping("/addPosition") @ResponseBody public ReturnDTO addPosition(@RequestBody BusLedgerPipe busLedgerPipe) { + + List busLedgerPipeList = iBusLedgerPipeService.getListByNumber(busLedgerPipe.getTagNumber()); + if(busLedgerPipeList!=null&&busLedgerPipeList.size()>0){ + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE,"安装位号已存!!!"); + } + Long id =IdUtil.getSnowflake(1,2).nextId(); + busLedgerPipe.setId(id); iBusLedgerPipeService.save(busLedgerPipe); - return ReturnUtil.success(busLedgerPipe.getId()); + return ReturnUtil.success(id); + } + + @ApiOperation("批量导入") + @RequestMapping(value = "/batchImport", method = RequestMethod.POST) + @ResponseBody + public Object batchImport(@RequestParam("file") MultipartFile file) { + List results = new ArrayList<>(); + try { + results = this.importExcel(BusPositionImportDTO.class, file, null, null); + List list = iBusLedgerPipeService.addPositionBatch(results); + if (!CollectionUtil.isEmpty(list)) { + //获取校验报错信息 + return new ErrorResponseData(list.get(0)); + } + } catch (Exception e) { + return catchMybatisPlusException(e, "导入位置信息失败"); + } + return ResponseData.success(); + } + + private ResponseData catchMybatisPlusException(Exception e, String errorMsg) { + if (e instanceof DataAccessException) { + DataAccessException mybatisPlusException = (DataAccessException) e; + String message = mybatisPlusException.getRootCause().getMessage(); + if (message.contains("Duplicate entry '")) { + return new ErrorResponseData("安装位号重复:" + message.replaceAll("Duplicate entry '", "").replaceAll("' for key 'DEVCODE'", "")); + } + } + return new ErrorResponseData(errorMsg); } @ApiOperation("编辑点位") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java index d1e08a8..d938876 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java @@ -51,6 +51,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getOperatorName()), "CREATE_USER", request.getOperatorName()); queryWrapper.ge(ObjectUtil.isNotEmpty(request.getStartTime()), "START_TIME", request.getStartTime()); queryWrapper.le(ObjectUtil.isNotEmpty(request.getEndTime()), "END_TIME", request.getEndTime()); + queryWrapper.orderByDesc("START_TIME"); return ReturnUtil.success(super.packForBT(iSyncLogService.page(page, queryWrapper))); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java index 5ee5291..23ddee9 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java @@ -73,4 +73,12 @@ " where bd.DEVCODE= #{devcode} and bd.VALID=1 " + ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD asc") List getDeviceTypeRule(@Param("devcode") String devcode); + + + @Select("SELECT bd.* from bus_device bd " + + "left JOIN bus_device_ledger bl on bd.id= bl.DEVICE_ID and bl.VALID=1 " + + "LEFT JOIN bus_ledger_all_view bv on bv.id= bl.LEDGER_ID and bv.type= bl.TYPE and bv.VALID=1 " + + "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") + List getListByWellId(@Param("wellId") Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java index e1d16c4..a4c3f7a 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java @@ -37,7 +37,7 @@ @Select("SELECT b.ORG_ID,b.ORG_CODE,b.ORG_NAME,b.PARENT_ID FROM `bus_sync_org_relation` b WHERE b.DEL_FLAG =0 and b.PARENT_ID = #{syncId} ") List synDept(@Param("syncId") String syncId); - @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view ") + @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view where VALID=1") List getBusLedgers(); @Select("SELECT DEVCODE FROM `bus_device` where VALID>0 ") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml index 99ef10b..c6d1fff 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml @@ -29,6 +29,7 @@ bp.DEVICE_MODEL as deviceModel, bt.TYPE_NAME as typeName, + bp.DATA_SERVICE as deviceCategory, bm.`NAME` as manufactureName, bl.tagNumber as tagNumber, bl.id as ledgerId, @@ -81,6 +82,10 @@ and bd.LOGTIME #{request.logTime2} + + and bp.DATA_SERVICE =#{request.deviceCategory} + + ORDER BY bd.INSTALL_DATE DESC diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml index bdadb6a..d3f4684 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml @@ -40,7 +40,7 @@ `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + AND bdl.VALID = 1 JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -99,8 +99,8 @@ bm.`NAME` as manufactureName FROM `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE - LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID and bdl.type=blp.type + AND bdl.VALID = 1 LEFT JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -117,7 +117,9 @@ WITH station_temp as(SELECT bl.ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID FROM `bus_ledger` bl where bl.VALID=1 and bl.TYPE =2) - select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME from station_temp bl + select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME,bd.DEVCODE from station_temp bl left join bus_device_ledger bdl on bdl.LEDGER_ID = bl.ID and bdl.TYPE =2 and bdl.valid=1 left join bus_device bd on bd.id= bdl.DEVICE_ID and bd.VALID=1 order by bl.ID diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml index 7b92b04..1d97c64 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml @@ -184,7 +184,7 @@ WHERE EQ_LOCNO like 'N%' and - EQ_CATEGORY in (1,3) + EQ_CATEGORY in (1,2,3,5) diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java index 859cf08..143b42d 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java @@ -23,6 +23,9 @@ @ApiModelProperty("设备类型id") private Long typeId; + @ApiModelProperty("产品名称") + private String productName; + @ApiModelProperty("指令集合") private List commandConfigList; diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java new file mode 100644 index 0000000..fc881a1 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.data.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 外协管盯 前端控制器 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RestController +@RequestMapping("/system/dataGasOther") +public class DataGasOtherController { + +} + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java new file mode 100644 index 0000000..b5f3627 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.data.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 外协管盯 Mapper 接口 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Mapper +public interface DataGasOtherMapper extends BaseMapper { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml new file mode 100644 index 0000000..8ce1455 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID, DEVCODE, WELL_CODE, WELL_NUMBER, GASVAL, VBAT, BATSTA, SIN, RSRP, SINR, UPTIME, LOGTIME, SIG, TEMP, SS_STATE + + + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java new file mode 100644 index 0000000..53972ba --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java @@ -0,0 +1,94 @@ +package com.casic.missiles.modular.data.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 外协管盯 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Builder +@Data +@TableName("data_gas_other") +@ApiModel(value = "DataGasOther对象", description = "外协管盯") +public class DataGasOther implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId("ID") + private Long id; + + @ApiModelProperty("设备编号") + @TableField("DEVCODE") + private String devcode; + + @ApiModelProperty("点位编号") + @TableField("WELL_CODE") + private String wellCode; + + @ApiModelProperty("位号") + @TableField("WELL_NUMBER") + private String wellNumber; + + @ApiModelProperty("气体浓度采样值") + @TableField("GASVAL") + private String gasval; + + @ApiModelProperty("设备电池电压值(毫伏)") + @TableField("VBAT") + private String vbat; + + @ApiModelProperty("电池状态0 正常、 1 低电告警、2 关机") + @TableField("BATSTA") + private String batsta; + + @ApiModelProperty("接收信号强度等级") + @TableField("SIN") + private String sin; + + @ApiModelProperty("接收信号参考质量 服务小 区的 RSRP 值") + @TableField("RSRP") + private String rsrp; + + @ApiModelProperty("信噪比") + @TableField("SINR") + private String sinr; + + @ApiModelProperty("采集时间") + @TableField("UPTIME") + private Date uptime; + + @ApiModelProperty("上传时间") + @TableField("LOGTIME") + private Date logtime; + + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态,0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java index 86077b8..f4d4417 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java @@ -76,4 +76,17 @@ private Date logtime; + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态:0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java new file mode 100644 index 0000000..842ca0b --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.data.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.data.entity.DataGasOther; + +/** + *

+ * 外协管盯 服务类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +public interface IDataGasOtherService extends IService { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java new file mode 100644 index 0000000..4c660e9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java @@ -0,0 +1,226 @@ +package com.casic.missiles.modular.data.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.enums.DeviceTypeEnum; +import com.casic.missiles.enums.DictEnum; +import com.casic.missiles.modular.alarm.dto.AlarmDeviceRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.AlarmRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.BusAlarmLedgerDTO; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.data.dao.DataGasMapper; +import com.casic.missiles.modular.data.dao.DataGasOtherMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import com.casic.missiles.modular.data.entity.DataTubeOther; +import com.casic.missiles.modular.data.service.IDataAbstractService; +import com.casic.missiles.modular.data.service.IDataGasOtherService; +import com.casic.missiles.modular.data.service.ITrackLogService; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Optional; + +/** + *

+ * 外协管盯 服务实现类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RequiredArgsConstructor +@Service +public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { + + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + private final DataGasMapper dataGasMapper; + private final IAlarmRecordsService alarmRecordsService; + private final IAlarmRuleService alarmRuleService; + private final ITrackLogService iTrackLogService; + private final IBusDeviceService busDeviceService; + + @Override + public void process(String dataContent) { + + //解析数据+根据业务处理存储数据 + JSONObject json = JSONObject.parseObject(dataContent); + String devCode = json.get("devCode").toString(); + JSONObject jsonObject = json.getJSONObject("mBody"); + if (mType[0].equals(json.get("mType")) || mType[3].equals(json.get("mType"))) {//存储上报数据 + this.processNormalData(jsonObject, devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + this.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.TubeOther.name().equals(json.get("devType"))) { + if ("TubeOtherConfigSuccess".equals(jsonObject.get("bType"))) { +// deviceConfigManager.updateStatus(devCode); + } + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } else if (mType[4].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); +// imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; + try { + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); + } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + } + } + + @Transactional + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.getString("cell"); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = jsonObject.getJSONArray("datas"); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + String bfcf = busDeviceService.getBfcf(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).getString("gasval"); + String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); + String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); + String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataGasOther.builder() + .wellCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .wellNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .devcode(devCode) +// .cell(cell) + .gasval(gas) + .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime))) + .logtime(new Date()) + .vbat(vbat) + .batsta(batsta) + .rsrp(rsrp) + .sin(pci) + .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) + .build());//存储采集数据 + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) continue; + + //3.清除设备告警 + alarmRecordsService.cancelDeviceAlarm(devCode); + //4.存报警 + //若没绑定井,则不产生报警 + boolean alarmFlag = false; + if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { + //获取报警规则 + List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); + for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { + if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && + Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { + alarmFlag = true; + //写入报警 + //1、判断报警是否已存在 + if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.TubeOther.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); + //7.更新管线状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java index d248540..b33a1ee 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java @@ -91,7 +91,6 @@ } - public List getBusAlarmLedgerList(String devCode) { return this.dataGasMapper.getListByDevCode(devCode); } @@ -113,6 +112,13 @@ for (int i = 0; i < jsonArray.size(); i++) { try { String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) .findFirst(); @@ -175,18 +181,18 @@ alarmRecordsService.cancelDeviceAlarm(devCode); //4.存报警 //若没绑定井,则不产生报警 - boolean alarmFlag = false; + boolean alarmFlag = false; if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { //获取报警规则 List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { - alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); } break; } @@ -197,7 +203,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及设备状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新监测井状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java index e848fce..6297093 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java @@ -84,42 +84,78 @@ } - @Transactional - public void processAlarmData(JSONObject jsonObject, String devCode) { - JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + public void processEventAlarm(String devCode, String eventTypeCode, String logTime, String eventValue) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - //获取报警事件 - List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - - List busWellDTOList = dataGasMapper.getListByDevCode(devCode); - //若没绑定井,则不产生报警 - if (busWellDTOList != null && busWellDTOList.size() > 0) { - - for (int i = 0; i < jsonArray.size(); i++) { + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + //特殊处理消警 + if ("0".equals(eventValue)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, eventTypeCode); + } + return; } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> eventTypeCode.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 - if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + if (!alarmDeviceRuleResponseDTO.isPresent()) return; //1.查询是否已存在该类报警 - if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) return; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); - - + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + } + } + } + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + try { + String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmEventCode)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } } } } @@ -169,7 +205,76 @@ .rightVibrateAlarm(VibR) .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(uptime))) .logtime(new Date()) - .build());//存储采集数据 + .build()); + + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + ruleResponseDTOList.forEach(ruleResponseDTO -> { + + if ("Sloping".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Sloping)&&(!alarmRecordsService.isWatchAlarms(devCode,"Sloping"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Sloping", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Sloping)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Sloping"); + + } + } + if ("Destroy".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Destroy)&&(!alarmRecordsService.isWatchAlarms(devCode,"Destroy"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Destroy", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Destroy)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Destroy"); + + } + } + if ("Leak".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Leak)&&(!alarmRecordsService.isWatchAlarms(devCode,"Leak"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Leak", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Leak)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Leak"); + + } + } + if ("DiscL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscL)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscL"); + + } + } + if ("DiscR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscR)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscR"); + } + } + + if ("VibL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibL)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibL"); + } + } + if ("VibR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibR)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibR"); + } + } + }); + +// //处理报警事件 +// processEventAlarm(devCode,"Sloping",uptime,Sloping); +// processEventAlarm(devCode,"Destroy",uptime,Destroy); +// processEventAlarm(devCode,"Leak",uptime,Leak); +// processEventAlarm(devCode,"DiscL",uptime,DiscL); +// processEventAlarm(devCode,"DiscR",uptime,DiscR); +// processEventAlarm(devCode,"VibL",uptime,VibL); +// processEventAlarm(devCode,"VibR",uptime,VibR); + //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -197,7 +302,7 @@ if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && gas >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), gas)) { @@ -213,7 +318,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R,alarmFlag?"燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R, alarmFlag ? "燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java index f913775..895d201 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java @@ -89,6 +89,7 @@ String bfcf = busDeviceService.getBfcf(devCode); if (DictEnum.BF_ON.equals(bfcf)) { JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); //获取报警事件 List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); List busWellDTOList = dataGasMapper.getListByDevCode(devCode); @@ -96,25 +97,43 @@ if (busWellDTOList != null && busWellDTOList.size() > 0) { for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 if (!alarmDeviceRuleResponseDTO.isPresent()) continue; //1.查询是否已存在该类报警 if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { @@ -141,6 +160,9 @@ String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); gas = String.format("%.2f", Double.valueOf(gas)); //1.存数据 save(DataTubeOther.builder() @@ -156,6 +178,9 @@ .rsrp(rsrp) .sin(pci) .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) .build());//存储采集数据 //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -186,7 +211,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 98e736b..2288075 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -216,5 +216,15 @@ public ReturnDTO syncDeviceStatus() { return ReturnUtil.success(iBusDeviceService.syncDeviceStatus()); } + + @ApiOperation("根据闸井id获取设备信息") + @PostMapping("/getListByWellId") + @ResponseBody + public ReturnDTO getListByWellId(@RequestBody IdDTO idDTO) { + Assert.isFalse(ObjectUtil.isEmpty(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iBusDeviceService.getListByWellId(idDTO.getId())); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java index 72a2d84..d6d9743 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java @@ -85,6 +85,7 @@ return ReturnUtil.success(iBusLedgerService.detail(idDTO.getId())); } + /** * 同步三级部门 * diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java index 9e412d2..4316b56 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java @@ -1,22 +1,33 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.response.ErrorResponseData; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; +import com.casic.missiles.modular.device.dto.BusPositionImportDTO; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.ReturnUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataAccessException; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; /** @@ -40,8 +51,44 @@ @PostMapping("/addPosition") @ResponseBody public ReturnDTO addPosition(@RequestBody BusLedgerPipe busLedgerPipe) { + + List busLedgerPipeList = iBusLedgerPipeService.getListByNumber(busLedgerPipe.getTagNumber()); + if(busLedgerPipeList!=null&&busLedgerPipeList.size()>0){ + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE,"安装位号已存!!!"); + } + Long id =IdUtil.getSnowflake(1,2).nextId(); + busLedgerPipe.setId(id); iBusLedgerPipeService.save(busLedgerPipe); - return ReturnUtil.success(busLedgerPipe.getId()); + return ReturnUtil.success(id); + } + + @ApiOperation("批量导入") + @RequestMapping(value = "/batchImport", method = RequestMethod.POST) + @ResponseBody + public Object batchImport(@RequestParam("file") MultipartFile file) { + List results = new ArrayList<>(); + try { + results = this.importExcel(BusPositionImportDTO.class, file, null, null); + List list = iBusLedgerPipeService.addPositionBatch(results); + if (!CollectionUtil.isEmpty(list)) { + //获取校验报错信息 + return new ErrorResponseData(list.get(0)); + } + } catch (Exception e) { + return catchMybatisPlusException(e, "导入位置信息失败"); + } + return ResponseData.success(); + } + + private ResponseData catchMybatisPlusException(Exception e, String errorMsg) { + if (e instanceof DataAccessException) { + DataAccessException mybatisPlusException = (DataAccessException) e; + String message = mybatisPlusException.getRootCause().getMessage(); + if (message.contains("Duplicate entry '")) { + return new ErrorResponseData("安装位号重复:" + message.replaceAll("Duplicate entry '", "").replaceAll("' for key 'DEVCODE'", "")); + } + } + return new ErrorResponseData(errorMsg); } @ApiOperation("编辑点位") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java index d1e08a8..d938876 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java @@ -51,6 +51,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getOperatorName()), "CREATE_USER", request.getOperatorName()); queryWrapper.ge(ObjectUtil.isNotEmpty(request.getStartTime()), "START_TIME", request.getStartTime()); queryWrapper.le(ObjectUtil.isNotEmpty(request.getEndTime()), "END_TIME", request.getEndTime()); + queryWrapper.orderByDesc("START_TIME"); return ReturnUtil.success(super.packForBT(iSyncLogService.page(page, queryWrapper))); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java index 5ee5291..23ddee9 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java @@ -73,4 +73,12 @@ " where bd.DEVCODE= #{devcode} and bd.VALID=1 " + ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD asc") List getDeviceTypeRule(@Param("devcode") String devcode); + + + @Select("SELECT bd.* from bus_device bd " + + "left JOIN bus_device_ledger bl on bd.id= bl.DEVICE_ID and bl.VALID=1 " + + "LEFT JOIN bus_ledger_all_view bv on bv.id= bl.LEDGER_ID and bv.type= bl.TYPE and bv.VALID=1 " + + "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") + List getListByWellId(@Param("wellId") Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java index e1d16c4..a4c3f7a 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java @@ -37,7 +37,7 @@ @Select("SELECT b.ORG_ID,b.ORG_CODE,b.ORG_NAME,b.PARENT_ID FROM `bus_sync_org_relation` b WHERE b.DEL_FLAG =0 and b.PARENT_ID = #{syncId} ") List synDept(@Param("syncId") String syncId); - @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view ") + @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view where VALID=1") List getBusLedgers(); @Select("SELECT DEVCODE FROM `bus_device` where VALID>0 ") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml index 99ef10b..c6d1fff 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml @@ -29,6 +29,7 @@ bp.DEVICE_MODEL as deviceModel, bt.TYPE_NAME as typeName, + bp.DATA_SERVICE as deviceCategory, bm.`NAME` as manufactureName, bl.tagNumber as tagNumber, bl.id as ledgerId, @@ -81,6 +82,10 @@ and bd.LOGTIME #{request.logTime2} + + and bp.DATA_SERVICE =#{request.deviceCategory} + + ORDER BY bd.INSTALL_DATE DESC diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml index bdadb6a..d3f4684 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml @@ -40,7 +40,7 @@ `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + AND bdl.VALID = 1 JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -99,8 +99,8 @@ bm.`NAME` as manufactureName FROM `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE - LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID and bdl.type=blp.type + AND bdl.VALID = 1 LEFT JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -117,7 +117,9 @@ WITH station_temp as(SELECT bl.ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID FROM `bus_ledger` bl where bl.VALID=1 and bl.TYPE =2) - select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME from station_temp bl + select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME,bd.DEVCODE from station_temp bl left join bus_device_ledger bdl on bdl.LEDGER_ID = bl.ID and bdl.TYPE =2 and bdl.valid=1 left join bus_device bd on bd.id= bdl.DEVICE_ID and bd.VALID=1 order by bl.ID diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml index 7b92b04..1d97c64 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml @@ -184,7 +184,7 @@ WHERE EQ_LOCNO like 'N%' and - EQ_CATEGORY in (1,3) + EQ_CATEGORY in (1,2,3,5) diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java index 859cf08..143b42d 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java @@ -23,6 +23,9 @@ @ApiModelProperty("设备类型id") private Long typeId; + @ApiModelProperty("产品名称") + private String productName; + @ApiModelProperty("指令集合") private List commandConfigList; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java index 646610b..2cb5894 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("最新上传结束时间") private String logTime2; + + @ApiModelProperty("设备类别(0:自有设备,1:数据服务)") + private String deviceCategory; } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java new file mode 100644 index 0000000..fc881a1 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.data.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 外协管盯 前端控制器 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RestController +@RequestMapping("/system/dataGasOther") +public class DataGasOtherController { + +} + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java new file mode 100644 index 0000000..b5f3627 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.data.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 外协管盯 Mapper 接口 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Mapper +public interface DataGasOtherMapper extends BaseMapper { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml new file mode 100644 index 0000000..8ce1455 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID, DEVCODE, WELL_CODE, WELL_NUMBER, GASVAL, VBAT, BATSTA, SIN, RSRP, SINR, UPTIME, LOGTIME, SIG, TEMP, SS_STATE + + + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java new file mode 100644 index 0000000..53972ba --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java @@ -0,0 +1,94 @@ +package com.casic.missiles.modular.data.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 外协管盯 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Builder +@Data +@TableName("data_gas_other") +@ApiModel(value = "DataGasOther对象", description = "外协管盯") +public class DataGasOther implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId("ID") + private Long id; + + @ApiModelProperty("设备编号") + @TableField("DEVCODE") + private String devcode; + + @ApiModelProperty("点位编号") + @TableField("WELL_CODE") + private String wellCode; + + @ApiModelProperty("位号") + @TableField("WELL_NUMBER") + private String wellNumber; + + @ApiModelProperty("气体浓度采样值") + @TableField("GASVAL") + private String gasval; + + @ApiModelProperty("设备电池电压值(毫伏)") + @TableField("VBAT") + private String vbat; + + @ApiModelProperty("电池状态0 正常、 1 低电告警、2 关机") + @TableField("BATSTA") + private String batsta; + + @ApiModelProperty("接收信号强度等级") + @TableField("SIN") + private String sin; + + @ApiModelProperty("接收信号参考质量 服务小 区的 RSRP 值") + @TableField("RSRP") + private String rsrp; + + @ApiModelProperty("信噪比") + @TableField("SINR") + private String sinr; + + @ApiModelProperty("采集时间") + @TableField("UPTIME") + private Date uptime; + + @ApiModelProperty("上传时间") + @TableField("LOGTIME") + private Date logtime; + + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态,0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java index 86077b8..f4d4417 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java @@ -76,4 +76,17 @@ private Date logtime; + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态:0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java new file mode 100644 index 0000000..842ca0b --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.data.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.data.entity.DataGasOther; + +/** + *

+ * 外协管盯 服务类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +public interface IDataGasOtherService extends IService { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java new file mode 100644 index 0000000..4c660e9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java @@ -0,0 +1,226 @@ +package com.casic.missiles.modular.data.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.enums.DeviceTypeEnum; +import com.casic.missiles.enums.DictEnum; +import com.casic.missiles.modular.alarm.dto.AlarmDeviceRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.AlarmRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.BusAlarmLedgerDTO; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.data.dao.DataGasMapper; +import com.casic.missiles.modular.data.dao.DataGasOtherMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import com.casic.missiles.modular.data.entity.DataTubeOther; +import com.casic.missiles.modular.data.service.IDataAbstractService; +import com.casic.missiles.modular.data.service.IDataGasOtherService; +import com.casic.missiles.modular.data.service.ITrackLogService; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Optional; + +/** + *

+ * 外协管盯 服务实现类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RequiredArgsConstructor +@Service +public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { + + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + private final DataGasMapper dataGasMapper; + private final IAlarmRecordsService alarmRecordsService; + private final IAlarmRuleService alarmRuleService; + private final ITrackLogService iTrackLogService; + private final IBusDeviceService busDeviceService; + + @Override + public void process(String dataContent) { + + //解析数据+根据业务处理存储数据 + JSONObject json = JSONObject.parseObject(dataContent); + String devCode = json.get("devCode").toString(); + JSONObject jsonObject = json.getJSONObject("mBody"); + if (mType[0].equals(json.get("mType")) || mType[3].equals(json.get("mType"))) {//存储上报数据 + this.processNormalData(jsonObject, devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + this.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.TubeOther.name().equals(json.get("devType"))) { + if ("TubeOtherConfigSuccess".equals(jsonObject.get("bType"))) { +// deviceConfigManager.updateStatus(devCode); + } + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } else if (mType[4].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); +// imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; + try { + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); + } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + } + } + + @Transactional + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.getString("cell"); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = jsonObject.getJSONArray("datas"); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + String bfcf = busDeviceService.getBfcf(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).getString("gasval"); + String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); + String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); + String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataGasOther.builder() + .wellCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .wellNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .devcode(devCode) +// .cell(cell) + .gasval(gas) + .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime))) + .logtime(new Date()) + .vbat(vbat) + .batsta(batsta) + .rsrp(rsrp) + .sin(pci) + .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) + .build());//存储采集数据 + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) continue; + + //3.清除设备告警 + alarmRecordsService.cancelDeviceAlarm(devCode); + //4.存报警 + //若没绑定井,则不产生报警 + boolean alarmFlag = false; + if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { + //获取报警规则 + List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); + for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { + if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && + Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { + alarmFlag = true; + //写入报警 + //1、判断报警是否已存在 + if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.TubeOther.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); + //7.更新管线状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java index d248540..b33a1ee 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java @@ -91,7 +91,6 @@ } - public List getBusAlarmLedgerList(String devCode) { return this.dataGasMapper.getListByDevCode(devCode); } @@ -113,6 +112,13 @@ for (int i = 0; i < jsonArray.size(); i++) { try { String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) .findFirst(); @@ -175,18 +181,18 @@ alarmRecordsService.cancelDeviceAlarm(devCode); //4.存报警 //若没绑定井,则不产生报警 - boolean alarmFlag = false; + boolean alarmFlag = false; if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { //获取报警规则 List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { - alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); } break; } @@ -197,7 +203,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及设备状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新监测井状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java index e848fce..6297093 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java @@ -84,42 +84,78 @@ } - @Transactional - public void processAlarmData(JSONObject jsonObject, String devCode) { - JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + public void processEventAlarm(String devCode, String eventTypeCode, String logTime, String eventValue) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - //获取报警事件 - List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - - List busWellDTOList = dataGasMapper.getListByDevCode(devCode); - //若没绑定井,则不产生报警 - if (busWellDTOList != null && busWellDTOList.size() > 0) { - - for (int i = 0; i < jsonArray.size(); i++) { + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + //特殊处理消警 + if ("0".equals(eventValue)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, eventTypeCode); + } + return; } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> eventTypeCode.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 - if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + if (!alarmDeviceRuleResponseDTO.isPresent()) return; //1.查询是否已存在该类报警 - if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) return; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); - - + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + } + } + } + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + try { + String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmEventCode)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } } } } @@ -169,7 +205,76 @@ .rightVibrateAlarm(VibR) .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(uptime))) .logtime(new Date()) - .build());//存储采集数据 + .build()); + + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + ruleResponseDTOList.forEach(ruleResponseDTO -> { + + if ("Sloping".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Sloping)&&(!alarmRecordsService.isWatchAlarms(devCode,"Sloping"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Sloping", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Sloping)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Sloping"); + + } + } + if ("Destroy".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Destroy)&&(!alarmRecordsService.isWatchAlarms(devCode,"Destroy"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Destroy", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Destroy)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Destroy"); + + } + } + if ("Leak".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Leak)&&(!alarmRecordsService.isWatchAlarms(devCode,"Leak"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Leak", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Leak)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Leak"); + + } + } + if ("DiscL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscL)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscL"); + + } + } + if ("DiscR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscR)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscR"); + } + } + + if ("VibL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibL)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibL"); + } + } + if ("VibR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibR)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibR"); + } + } + }); + +// //处理报警事件 +// processEventAlarm(devCode,"Sloping",uptime,Sloping); +// processEventAlarm(devCode,"Destroy",uptime,Destroy); +// processEventAlarm(devCode,"Leak",uptime,Leak); +// processEventAlarm(devCode,"DiscL",uptime,DiscL); +// processEventAlarm(devCode,"DiscR",uptime,DiscR); +// processEventAlarm(devCode,"VibL",uptime,VibL); +// processEventAlarm(devCode,"VibR",uptime,VibR); + //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -197,7 +302,7 @@ if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && gas >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), gas)) { @@ -213,7 +318,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R,alarmFlag?"燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R, alarmFlag ? "燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java index f913775..895d201 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java @@ -89,6 +89,7 @@ String bfcf = busDeviceService.getBfcf(devCode); if (DictEnum.BF_ON.equals(bfcf)) { JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); //获取报警事件 List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); List busWellDTOList = dataGasMapper.getListByDevCode(devCode); @@ -96,25 +97,43 @@ if (busWellDTOList != null && busWellDTOList.size() > 0) { for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 if (!alarmDeviceRuleResponseDTO.isPresent()) continue; //1.查询是否已存在该类报警 if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { @@ -141,6 +160,9 @@ String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); gas = String.format("%.2f", Double.valueOf(gas)); //1.存数据 save(DataTubeOther.builder() @@ -156,6 +178,9 @@ .rsrp(rsrp) .sin(pci) .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) .build());//存储采集数据 //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -186,7 +211,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 98e736b..2288075 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -216,5 +216,15 @@ public ReturnDTO syncDeviceStatus() { return ReturnUtil.success(iBusDeviceService.syncDeviceStatus()); } + + @ApiOperation("根据闸井id获取设备信息") + @PostMapping("/getListByWellId") + @ResponseBody + public ReturnDTO getListByWellId(@RequestBody IdDTO idDTO) { + Assert.isFalse(ObjectUtil.isEmpty(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iBusDeviceService.getListByWellId(idDTO.getId())); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java index 72a2d84..d6d9743 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java @@ -85,6 +85,7 @@ return ReturnUtil.success(iBusLedgerService.detail(idDTO.getId())); } + /** * 同步三级部门 * diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java index 9e412d2..4316b56 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java @@ -1,22 +1,33 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.response.ErrorResponseData; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; +import com.casic.missiles.modular.device.dto.BusPositionImportDTO; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.ReturnUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataAccessException; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; /** @@ -40,8 +51,44 @@ @PostMapping("/addPosition") @ResponseBody public ReturnDTO addPosition(@RequestBody BusLedgerPipe busLedgerPipe) { + + List busLedgerPipeList = iBusLedgerPipeService.getListByNumber(busLedgerPipe.getTagNumber()); + if(busLedgerPipeList!=null&&busLedgerPipeList.size()>0){ + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE,"安装位号已存!!!"); + } + Long id =IdUtil.getSnowflake(1,2).nextId(); + busLedgerPipe.setId(id); iBusLedgerPipeService.save(busLedgerPipe); - return ReturnUtil.success(busLedgerPipe.getId()); + return ReturnUtil.success(id); + } + + @ApiOperation("批量导入") + @RequestMapping(value = "/batchImport", method = RequestMethod.POST) + @ResponseBody + public Object batchImport(@RequestParam("file") MultipartFile file) { + List results = new ArrayList<>(); + try { + results = this.importExcel(BusPositionImportDTO.class, file, null, null); + List list = iBusLedgerPipeService.addPositionBatch(results); + if (!CollectionUtil.isEmpty(list)) { + //获取校验报错信息 + return new ErrorResponseData(list.get(0)); + } + } catch (Exception e) { + return catchMybatisPlusException(e, "导入位置信息失败"); + } + return ResponseData.success(); + } + + private ResponseData catchMybatisPlusException(Exception e, String errorMsg) { + if (e instanceof DataAccessException) { + DataAccessException mybatisPlusException = (DataAccessException) e; + String message = mybatisPlusException.getRootCause().getMessage(); + if (message.contains("Duplicate entry '")) { + return new ErrorResponseData("安装位号重复:" + message.replaceAll("Duplicate entry '", "").replaceAll("' for key 'DEVCODE'", "")); + } + } + return new ErrorResponseData(errorMsg); } @ApiOperation("编辑点位") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java index d1e08a8..d938876 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java @@ -51,6 +51,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getOperatorName()), "CREATE_USER", request.getOperatorName()); queryWrapper.ge(ObjectUtil.isNotEmpty(request.getStartTime()), "START_TIME", request.getStartTime()); queryWrapper.le(ObjectUtil.isNotEmpty(request.getEndTime()), "END_TIME", request.getEndTime()); + queryWrapper.orderByDesc("START_TIME"); return ReturnUtil.success(super.packForBT(iSyncLogService.page(page, queryWrapper))); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java index 5ee5291..23ddee9 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java @@ -73,4 +73,12 @@ " where bd.DEVCODE= #{devcode} and bd.VALID=1 " + ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD asc") List getDeviceTypeRule(@Param("devcode") String devcode); + + + @Select("SELECT bd.* from bus_device bd " + + "left JOIN bus_device_ledger bl on bd.id= bl.DEVICE_ID and bl.VALID=1 " + + "LEFT JOIN bus_ledger_all_view bv on bv.id= bl.LEDGER_ID and bv.type= bl.TYPE and bv.VALID=1 " + + "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") + List getListByWellId(@Param("wellId") Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java index e1d16c4..a4c3f7a 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java @@ -37,7 +37,7 @@ @Select("SELECT b.ORG_ID,b.ORG_CODE,b.ORG_NAME,b.PARENT_ID FROM `bus_sync_org_relation` b WHERE b.DEL_FLAG =0 and b.PARENT_ID = #{syncId} ") List synDept(@Param("syncId") String syncId); - @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view ") + @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view where VALID=1") List getBusLedgers(); @Select("SELECT DEVCODE FROM `bus_device` where VALID>0 ") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml index 99ef10b..c6d1fff 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml @@ -29,6 +29,7 @@ bp.DEVICE_MODEL as deviceModel, bt.TYPE_NAME as typeName, + bp.DATA_SERVICE as deviceCategory, bm.`NAME` as manufactureName, bl.tagNumber as tagNumber, bl.id as ledgerId, @@ -81,6 +82,10 @@ and bd.LOGTIME #{request.logTime2} + + and bp.DATA_SERVICE =#{request.deviceCategory} + + ORDER BY bd.INSTALL_DATE DESC diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml index bdadb6a..d3f4684 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml @@ -40,7 +40,7 @@ `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + AND bdl.VALID = 1 JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -99,8 +99,8 @@ bm.`NAME` as manufactureName FROM `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE - LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID and bdl.type=blp.type + AND bdl.VALID = 1 LEFT JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -117,7 +117,9 @@ WITH station_temp as(SELECT bl.ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID FROM `bus_ledger` bl where bl.VALID=1 and bl.TYPE =2) - select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME from station_temp bl + select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME,bd.DEVCODE from station_temp bl left join bus_device_ledger bdl on bdl.LEDGER_ID = bl.ID and bdl.TYPE =2 and bdl.valid=1 left join bus_device bd on bd.id= bdl.DEVICE_ID and bd.VALID=1 order by bl.ID diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml index 7b92b04..1d97c64 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml @@ -184,7 +184,7 @@ WHERE EQ_LOCNO like 'N%' and - EQ_CATEGORY in (1,3) + EQ_CATEGORY in (1,2,3,5) diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java index 859cf08..143b42d 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java @@ -23,6 +23,9 @@ @ApiModelProperty("设备类型id") private Long typeId; + @ApiModelProperty("产品名称") + private String productName; + @ApiModelProperty("指令集合") private List commandConfigList; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java index 646610b..2cb5894 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("最新上传结束时间") private String logTime2; + + @ApiModelProperty("设备类别(0:自有设备,1:数据服务)") + private String deviceCategory; } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java index 8c95537..28b30fa 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java @@ -44,6 +44,9 @@ @ExcelProperty("关联管线") private String pipeCode; + @ExcelProperty("监测类型") + private String monitorType; + private String watchObject; private Long deviceType; diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java new file mode 100644 index 0000000..fc881a1 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.data.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 外协管盯 前端控制器 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RestController +@RequestMapping("/system/dataGasOther") +public class DataGasOtherController { + +} + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java new file mode 100644 index 0000000..b5f3627 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.data.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 外协管盯 Mapper 接口 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Mapper +public interface DataGasOtherMapper extends BaseMapper { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml new file mode 100644 index 0000000..8ce1455 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID, DEVCODE, WELL_CODE, WELL_NUMBER, GASVAL, VBAT, BATSTA, SIN, RSRP, SINR, UPTIME, LOGTIME, SIG, TEMP, SS_STATE + + + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java new file mode 100644 index 0000000..53972ba --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java @@ -0,0 +1,94 @@ +package com.casic.missiles.modular.data.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 外协管盯 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Builder +@Data +@TableName("data_gas_other") +@ApiModel(value = "DataGasOther对象", description = "外协管盯") +public class DataGasOther implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId("ID") + private Long id; + + @ApiModelProperty("设备编号") + @TableField("DEVCODE") + private String devcode; + + @ApiModelProperty("点位编号") + @TableField("WELL_CODE") + private String wellCode; + + @ApiModelProperty("位号") + @TableField("WELL_NUMBER") + private String wellNumber; + + @ApiModelProperty("气体浓度采样值") + @TableField("GASVAL") + private String gasval; + + @ApiModelProperty("设备电池电压值(毫伏)") + @TableField("VBAT") + private String vbat; + + @ApiModelProperty("电池状态0 正常、 1 低电告警、2 关机") + @TableField("BATSTA") + private String batsta; + + @ApiModelProperty("接收信号强度等级") + @TableField("SIN") + private String sin; + + @ApiModelProperty("接收信号参考质量 服务小 区的 RSRP 值") + @TableField("RSRP") + private String rsrp; + + @ApiModelProperty("信噪比") + @TableField("SINR") + private String sinr; + + @ApiModelProperty("采集时间") + @TableField("UPTIME") + private Date uptime; + + @ApiModelProperty("上传时间") + @TableField("LOGTIME") + private Date logtime; + + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态,0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java index 86077b8..f4d4417 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java @@ -76,4 +76,17 @@ private Date logtime; + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态:0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java new file mode 100644 index 0000000..842ca0b --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.data.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.data.entity.DataGasOther; + +/** + *

+ * 外协管盯 服务类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +public interface IDataGasOtherService extends IService { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java new file mode 100644 index 0000000..4c660e9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java @@ -0,0 +1,226 @@ +package com.casic.missiles.modular.data.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.enums.DeviceTypeEnum; +import com.casic.missiles.enums.DictEnum; +import com.casic.missiles.modular.alarm.dto.AlarmDeviceRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.AlarmRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.BusAlarmLedgerDTO; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.data.dao.DataGasMapper; +import com.casic.missiles.modular.data.dao.DataGasOtherMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import com.casic.missiles.modular.data.entity.DataTubeOther; +import com.casic.missiles.modular.data.service.IDataAbstractService; +import com.casic.missiles.modular.data.service.IDataGasOtherService; +import com.casic.missiles.modular.data.service.ITrackLogService; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Optional; + +/** + *

+ * 外协管盯 服务实现类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RequiredArgsConstructor +@Service +public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { + + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + private final DataGasMapper dataGasMapper; + private final IAlarmRecordsService alarmRecordsService; + private final IAlarmRuleService alarmRuleService; + private final ITrackLogService iTrackLogService; + private final IBusDeviceService busDeviceService; + + @Override + public void process(String dataContent) { + + //解析数据+根据业务处理存储数据 + JSONObject json = JSONObject.parseObject(dataContent); + String devCode = json.get("devCode").toString(); + JSONObject jsonObject = json.getJSONObject("mBody"); + if (mType[0].equals(json.get("mType")) || mType[3].equals(json.get("mType"))) {//存储上报数据 + this.processNormalData(jsonObject, devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + this.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.TubeOther.name().equals(json.get("devType"))) { + if ("TubeOtherConfigSuccess".equals(jsonObject.get("bType"))) { +// deviceConfigManager.updateStatus(devCode); + } + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } else if (mType[4].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); +// imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; + try { + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); + } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + } + } + + @Transactional + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.getString("cell"); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = jsonObject.getJSONArray("datas"); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + String bfcf = busDeviceService.getBfcf(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).getString("gasval"); + String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); + String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); + String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataGasOther.builder() + .wellCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .wellNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .devcode(devCode) +// .cell(cell) + .gasval(gas) + .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime))) + .logtime(new Date()) + .vbat(vbat) + .batsta(batsta) + .rsrp(rsrp) + .sin(pci) + .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) + .build());//存储采集数据 + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) continue; + + //3.清除设备告警 + alarmRecordsService.cancelDeviceAlarm(devCode); + //4.存报警 + //若没绑定井,则不产生报警 + boolean alarmFlag = false; + if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { + //获取报警规则 + List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); + for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { + if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && + Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { + alarmFlag = true; + //写入报警 + //1、判断报警是否已存在 + if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.TubeOther.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); + //7.更新管线状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java index d248540..b33a1ee 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java @@ -91,7 +91,6 @@ } - public List getBusAlarmLedgerList(String devCode) { return this.dataGasMapper.getListByDevCode(devCode); } @@ -113,6 +112,13 @@ for (int i = 0; i < jsonArray.size(); i++) { try { String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) .findFirst(); @@ -175,18 +181,18 @@ alarmRecordsService.cancelDeviceAlarm(devCode); //4.存报警 //若没绑定井,则不产生报警 - boolean alarmFlag = false; + boolean alarmFlag = false; if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { //获取报警规则 List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { - alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); } break; } @@ -197,7 +203,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及设备状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新监测井状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java index e848fce..6297093 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java @@ -84,42 +84,78 @@ } - @Transactional - public void processAlarmData(JSONObject jsonObject, String devCode) { - JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + public void processEventAlarm(String devCode, String eventTypeCode, String logTime, String eventValue) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - //获取报警事件 - List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - - List busWellDTOList = dataGasMapper.getListByDevCode(devCode); - //若没绑定井,则不产生报警 - if (busWellDTOList != null && busWellDTOList.size() > 0) { - - for (int i = 0; i < jsonArray.size(); i++) { + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + //特殊处理消警 + if ("0".equals(eventValue)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, eventTypeCode); + } + return; } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> eventTypeCode.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 - if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + if (!alarmDeviceRuleResponseDTO.isPresent()) return; //1.查询是否已存在该类报警 - if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) return; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); - - + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + } + } + } + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + try { + String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmEventCode)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } } } } @@ -169,7 +205,76 @@ .rightVibrateAlarm(VibR) .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(uptime))) .logtime(new Date()) - .build());//存储采集数据 + .build()); + + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + ruleResponseDTOList.forEach(ruleResponseDTO -> { + + if ("Sloping".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Sloping)&&(!alarmRecordsService.isWatchAlarms(devCode,"Sloping"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Sloping", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Sloping)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Sloping"); + + } + } + if ("Destroy".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Destroy)&&(!alarmRecordsService.isWatchAlarms(devCode,"Destroy"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Destroy", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Destroy)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Destroy"); + + } + } + if ("Leak".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Leak)&&(!alarmRecordsService.isWatchAlarms(devCode,"Leak"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Leak", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Leak)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Leak"); + + } + } + if ("DiscL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscL)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscL"); + + } + } + if ("DiscR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscR)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscR"); + } + } + + if ("VibL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibL)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibL"); + } + } + if ("VibR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibR)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibR"); + } + } + }); + +// //处理报警事件 +// processEventAlarm(devCode,"Sloping",uptime,Sloping); +// processEventAlarm(devCode,"Destroy",uptime,Destroy); +// processEventAlarm(devCode,"Leak",uptime,Leak); +// processEventAlarm(devCode,"DiscL",uptime,DiscL); +// processEventAlarm(devCode,"DiscR",uptime,DiscR); +// processEventAlarm(devCode,"VibL",uptime,VibL); +// processEventAlarm(devCode,"VibR",uptime,VibR); + //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -197,7 +302,7 @@ if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && gas >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), gas)) { @@ -213,7 +318,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R,alarmFlag?"燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R, alarmFlag ? "燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java index f913775..895d201 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java @@ -89,6 +89,7 @@ String bfcf = busDeviceService.getBfcf(devCode); if (DictEnum.BF_ON.equals(bfcf)) { JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); //获取报警事件 List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); List busWellDTOList = dataGasMapper.getListByDevCode(devCode); @@ -96,25 +97,43 @@ if (busWellDTOList != null && busWellDTOList.size() > 0) { for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 if (!alarmDeviceRuleResponseDTO.isPresent()) continue; //1.查询是否已存在该类报警 if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { @@ -141,6 +160,9 @@ String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); gas = String.format("%.2f", Double.valueOf(gas)); //1.存数据 save(DataTubeOther.builder() @@ -156,6 +178,9 @@ .rsrp(rsrp) .sin(pci) .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) .build());//存储采集数据 //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -186,7 +211,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 98e736b..2288075 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -216,5 +216,15 @@ public ReturnDTO syncDeviceStatus() { return ReturnUtil.success(iBusDeviceService.syncDeviceStatus()); } + + @ApiOperation("根据闸井id获取设备信息") + @PostMapping("/getListByWellId") + @ResponseBody + public ReturnDTO getListByWellId(@RequestBody IdDTO idDTO) { + Assert.isFalse(ObjectUtil.isEmpty(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iBusDeviceService.getListByWellId(idDTO.getId())); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java index 72a2d84..d6d9743 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java @@ -85,6 +85,7 @@ return ReturnUtil.success(iBusLedgerService.detail(idDTO.getId())); } + /** * 同步三级部门 * diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java index 9e412d2..4316b56 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java @@ -1,22 +1,33 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.response.ErrorResponseData; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; +import com.casic.missiles.modular.device.dto.BusPositionImportDTO; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.ReturnUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataAccessException; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; /** @@ -40,8 +51,44 @@ @PostMapping("/addPosition") @ResponseBody public ReturnDTO addPosition(@RequestBody BusLedgerPipe busLedgerPipe) { + + List busLedgerPipeList = iBusLedgerPipeService.getListByNumber(busLedgerPipe.getTagNumber()); + if(busLedgerPipeList!=null&&busLedgerPipeList.size()>0){ + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE,"安装位号已存!!!"); + } + Long id =IdUtil.getSnowflake(1,2).nextId(); + busLedgerPipe.setId(id); iBusLedgerPipeService.save(busLedgerPipe); - return ReturnUtil.success(busLedgerPipe.getId()); + return ReturnUtil.success(id); + } + + @ApiOperation("批量导入") + @RequestMapping(value = "/batchImport", method = RequestMethod.POST) + @ResponseBody + public Object batchImport(@RequestParam("file") MultipartFile file) { + List results = new ArrayList<>(); + try { + results = this.importExcel(BusPositionImportDTO.class, file, null, null); + List list = iBusLedgerPipeService.addPositionBatch(results); + if (!CollectionUtil.isEmpty(list)) { + //获取校验报错信息 + return new ErrorResponseData(list.get(0)); + } + } catch (Exception e) { + return catchMybatisPlusException(e, "导入位置信息失败"); + } + return ResponseData.success(); + } + + private ResponseData catchMybatisPlusException(Exception e, String errorMsg) { + if (e instanceof DataAccessException) { + DataAccessException mybatisPlusException = (DataAccessException) e; + String message = mybatisPlusException.getRootCause().getMessage(); + if (message.contains("Duplicate entry '")) { + return new ErrorResponseData("安装位号重复:" + message.replaceAll("Duplicate entry '", "").replaceAll("' for key 'DEVCODE'", "")); + } + } + return new ErrorResponseData(errorMsg); } @ApiOperation("编辑点位") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java index d1e08a8..d938876 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java @@ -51,6 +51,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getOperatorName()), "CREATE_USER", request.getOperatorName()); queryWrapper.ge(ObjectUtil.isNotEmpty(request.getStartTime()), "START_TIME", request.getStartTime()); queryWrapper.le(ObjectUtil.isNotEmpty(request.getEndTime()), "END_TIME", request.getEndTime()); + queryWrapper.orderByDesc("START_TIME"); return ReturnUtil.success(super.packForBT(iSyncLogService.page(page, queryWrapper))); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java index 5ee5291..23ddee9 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java @@ -73,4 +73,12 @@ " where bd.DEVCODE= #{devcode} and bd.VALID=1 " + ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD asc") List getDeviceTypeRule(@Param("devcode") String devcode); + + + @Select("SELECT bd.* from bus_device bd " + + "left JOIN bus_device_ledger bl on bd.id= bl.DEVICE_ID and bl.VALID=1 " + + "LEFT JOIN bus_ledger_all_view bv on bv.id= bl.LEDGER_ID and bv.type= bl.TYPE and bv.VALID=1 " + + "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") + List getListByWellId(@Param("wellId") Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java index e1d16c4..a4c3f7a 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java @@ -37,7 +37,7 @@ @Select("SELECT b.ORG_ID,b.ORG_CODE,b.ORG_NAME,b.PARENT_ID FROM `bus_sync_org_relation` b WHERE b.DEL_FLAG =0 and b.PARENT_ID = #{syncId} ") List synDept(@Param("syncId") String syncId); - @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view ") + @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view where VALID=1") List getBusLedgers(); @Select("SELECT DEVCODE FROM `bus_device` where VALID>0 ") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml index 99ef10b..c6d1fff 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml @@ -29,6 +29,7 @@ bp.DEVICE_MODEL as deviceModel, bt.TYPE_NAME as typeName, + bp.DATA_SERVICE as deviceCategory, bm.`NAME` as manufactureName, bl.tagNumber as tagNumber, bl.id as ledgerId, @@ -81,6 +82,10 @@ and bd.LOGTIME #{request.logTime2} + + and bp.DATA_SERVICE =#{request.deviceCategory} + + ORDER BY bd.INSTALL_DATE DESC diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml index bdadb6a..d3f4684 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml @@ -40,7 +40,7 @@ `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + AND bdl.VALID = 1 JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -99,8 +99,8 @@ bm.`NAME` as manufactureName FROM `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE - LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID and bdl.type=blp.type + AND bdl.VALID = 1 LEFT JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -117,7 +117,9 @@ WITH station_temp as(SELECT bl.ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID FROM `bus_ledger` bl where bl.VALID=1 and bl.TYPE =2) - select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME from station_temp bl + select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME,bd.DEVCODE from station_temp bl left join bus_device_ledger bdl on bdl.LEDGER_ID = bl.ID and bdl.TYPE =2 and bdl.valid=1 left join bus_device bd on bd.id= bdl.DEVICE_ID and bd.VALID=1 order by bl.ID diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml index 7b92b04..1d97c64 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml @@ -184,7 +184,7 @@ WHERE EQ_LOCNO like 'N%' and - EQ_CATEGORY in (1,3) + EQ_CATEGORY in (1,2,3,5) diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java index 859cf08..143b42d 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java @@ -23,6 +23,9 @@ @ApiModelProperty("设备类型id") private Long typeId; + @ApiModelProperty("产品名称") + private String productName; + @ApiModelProperty("指令集合") private List commandConfigList; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java index 646610b..2cb5894 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("最新上传结束时间") private String logTime2; + + @ApiModelProperty("设备类别(0:自有设备,1:数据服务)") + private String deviceCategory; } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java index 8c95537..28b30fa 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java @@ -44,6 +44,9 @@ @ExcelProperty("关联管线") private String pipeCode; + @ExcelProperty("监测类型") + private String monitorType; + private String watchObject; private Long deviceType; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java index 0980c34..ac5daf0 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java @@ -24,4 +24,7 @@ @ApiModelProperty("详细位置") private String position; + @ApiModelProperty("1:其他,3:管线") + private String type; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java new file mode 100644 index 0000000..fc881a1 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.data.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 外协管盯 前端控制器 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RestController +@RequestMapping("/system/dataGasOther") +public class DataGasOtherController { + +} + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java new file mode 100644 index 0000000..b5f3627 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.data.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 外协管盯 Mapper 接口 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Mapper +public interface DataGasOtherMapper extends BaseMapper { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml new file mode 100644 index 0000000..8ce1455 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID, DEVCODE, WELL_CODE, WELL_NUMBER, GASVAL, VBAT, BATSTA, SIN, RSRP, SINR, UPTIME, LOGTIME, SIG, TEMP, SS_STATE + + + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java new file mode 100644 index 0000000..53972ba --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java @@ -0,0 +1,94 @@ +package com.casic.missiles.modular.data.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 外协管盯 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Builder +@Data +@TableName("data_gas_other") +@ApiModel(value = "DataGasOther对象", description = "外协管盯") +public class DataGasOther implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId("ID") + private Long id; + + @ApiModelProperty("设备编号") + @TableField("DEVCODE") + private String devcode; + + @ApiModelProperty("点位编号") + @TableField("WELL_CODE") + private String wellCode; + + @ApiModelProperty("位号") + @TableField("WELL_NUMBER") + private String wellNumber; + + @ApiModelProperty("气体浓度采样值") + @TableField("GASVAL") + private String gasval; + + @ApiModelProperty("设备电池电压值(毫伏)") + @TableField("VBAT") + private String vbat; + + @ApiModelProperty("电池状态0 正常、 1 低电告警、2 关机") + @TableField("BATSTA") + private String batsta; + + @ApiModelProperty("接收信号强度等级") + @TableField("SIN") + private String sin; + + @ApiModelProperty("接收信号参考质量 服务小 区的 RSRP 值") + @TableField("RSRP") + private String rsrp; + + @ApiModelProperty("信噪比") + @TableField("SINR") + private String sinr; + + @ApiModelProperty("采集时间") + @TableField("UPTIME") + private Date uptime; + + @ApiModelProperty("上传时间") + @TableField("LOGTIME") + private Date logtime; + + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态,0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java index 86077b8..f4d4417 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java @@ -76,4 +76,17 @@ private Date logtime; + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态:0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java new file mode 100644 index 0000000..842ca0b --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.data.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.data.entity.DataGasOther; + +/** + *

+ * 外协管盯 服务类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +public interface IDataGasOtherService extends IService { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java new file mode 100644 index 0000000..4c660e9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java @@ -0,0 +1,226 @@ +package com.casic.missiles.modular.data.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.enums.DeviceTypeEnum; +import com.casic.missiles.enums.DictEnum; +import com.casic.missiles.modular.alarm.dto.AlarmDeviceRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.AlarmRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.BusAlarmLedgerDTO; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.data.dao.DataGasMapper; +import com.casic.missiles.modular.data.dao.DataGasOtherMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import com.casic.missiles.modular.data.entity.DataTubeOther; +import com.casic.missiles.modular.data.service.IDataAbstractService; +import com.casic.missiles.modular.data.service.IDataGasOtherService; +import com.casic.missiles.modular.data.service.ITrackLogService; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Optional; + +/** + *

+ * 外协管盯 服务实现类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RequiredArgsConstructor +@Service +public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { + + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + private final DataGasMapper dataGasMapper; + private final IAlarmRecordsService alarmRecordsService; + private final IAlarmRuleService alarmRuleService; + private final ITrackLogService iTrackLogService; + private final IBusDeviceService busDeviceService; + + @Override + public void process(String dataContent) { + + //解析数据+根据业务处理存储数据 + JSONObject json = JSONObject.parseObject(dataContent); + String devCode = json.get("devCode").toString(); + JSONObject jsonObject = json.getJSONObject("mBody"); + if (mType[0].equals(json.get("mType")) || mType[3].equals(json.get("mType"))) {//存储上报数据 + this.processNormalData(jsonObject, devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + this.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.TubeOther.name().equals(json.get("devType"))) { + if ("TubeOtherConfigSuccess".equals(jsonObject.get("bType"))) { +// deviceConfigManager.updateStatus(devCode); + } + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } else if (mType[4].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); +// imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; + try { + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); + } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + } + } + + @Transactional + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.getString("cell"); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = jsonObject.getJSONArray("datas"); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + String bfcf = busDeviceService.getBfcf(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).getString("gasval"); + String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); + String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); + String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataGasOther.builder() + .wellCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .wellNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .devcode(devCode) +// .cell(cell) + .gasval(gas) + .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime))) + .logtime(new Date()) + .vbat(vbat) + .batsta(batsta) + .rsrp(rsrp) + .sin(pci) + .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) + .build());//存储采集数据 + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) continue; + + //3.清除设备告警 + alarmRecordsService.cancelDeviceAlarm(devCode); + //4.存报警 + //若没绑定井,则不产生报警 + boolean alarmFlag = false; + if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { + //获取报警规则 + List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); + for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { + if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && + Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { + alarmFlag = true; + //写入报警 + //1、判断报警是否已存在 + if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.TubeOther.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); + //7.更新管线状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java index d248540..b33a1ee 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java @@ -91,7 +91,6 @@ } - public List getBusAlarmLedgerList(String devCode) { return this.dataGasMapper.getListByDevCode(devCode); } @@ -113,6 +112,13 @@ for (int i = 0; i < jsonArray.size(); i++) { try { String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) .findFirst(); @@ -175,18 +181,18 @@ alarmRecordsService.cancelDeviceAlarm(devCode); //4.存报警 //若没绑定井,则不产生报警 - boolean alarmFlag = false; + boolean alarmFlag = false; if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { //获取报警规则 List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { - alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); } break; } @@ -197,7 +203,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及设备状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新监测井状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java index e848fce..6297093 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java @@ -84,42 +84,78 @@ } - @Transactional - public void processAlarmData(JSONObject jsonObject, String devCode) { - JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + public void processEventAlarm(String devCode, String eventTypeCode, String logTime, String eventValue) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - //获取报警事件 - List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - - List busWellDTOList = dataGasMapper.getListByDevCode(devCode); - //若没绑定井,则不产生报警 - if (busWellDTOList != null && busWellDTOList.size() > 0) { - - for (int i = 0; i < jsonArray.size(); i++) { + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + //特殊处理消警 + if ("0".equals(eventValue)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, eventTypeCode); + } + return; } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> eventTypeCode.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 - if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + if (!alarmDeviceRuleResponseDTO.isPresent()) return; //1.查询是否已存在该类报警 - if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) return; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); - - + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + } + } + } + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + try { + String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmEventCode)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } } } } @@ -169,7 +205,76 @@ .rightVibrateAlarm(VibR) .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(uptime))) .logtime(new Date()) - .build());//存储采集数据 + .build()); + + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + ruleResponseDTOList.forEach(ruleResponseDTO -> { + + if ("Sloping".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Sloping)&&(!alarmRecordsService.isWatchAlarms(devCode,"Sloping"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Sloping", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Sloping)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Sloping"); + + } + } + if ("Destroy".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Destroy)&&(!alarmRecordsService.isWatchAlarms(devCode,"Destroy"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Destroy", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Destroy)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Destroy"); + + } + } + if ("Leak".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Leak)&&(!alarmRecordsService.isWatchAlarms(devCode,"Leak"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Leak", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Leak)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Leak"); + + } + } + if ("DiscL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscL)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscL"); + + } + } + if ("DiscR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscR)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscR"); + } + } + + if ("VibL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibL)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibL"); + } + } + if ("VibR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibR)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibR"); + } + } + }); + +// //处理报警事件 +// processEventAlarm(devCode,"Sloping",uptime,Sloping); +// processEventAlarm(devCode,"Destroy",uptime,Destroy); +// processEventAlarm(devCode,"Leak",uptime,Leak); +// processEventAlarm(devCode,"DiscL",uptime,DiscL); +// processEventAlarm(devCode,"DiscR",uptime,DiscR); +// processEventAlarm(devCode,"VibL",uptime,VibL); +// processEventAlarm(devCode,"VibR",uptime,VibR); + //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -197,7 +302,7 @@ if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && gas >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), gas)) { @@ -213,7 +318,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R,alarmFlag?"燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R, alarmFlag ? "燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java index f913775..895d201 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java @@ -89,6 +89,7 @@ String bfcf = busDeviceService.getBfcf(devCode); if (DictEnum.BF_ON.equals(bfcf)) { JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); //获取报警事件 List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); List busWellDTOList = dataGasMapper.getListByDevCode(devCode); @@ -96,25 +97,43 @@ if (busWellDTOList != null && busWellDTOList.size() > 0) { for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 if (!alarmDeviceRuleResponseDTO.isPresent()) continue; //1.查询是否已存在该类报警 if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { @@ -141,6 +160,9 @@ String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); gas = String.format("%.2f", Double.valueOf(gas)); //1.存数据 save(DataTubeOther.builder() @@ -156,6 +178,9 @@ .rsrp(rsrp) .sin(pci) .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) .build());//存储采集数据 //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -186,7 +211,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 98e736b..2288075 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -216,5 +216,15 @@ public ReturnDTO syncDeviceStatus() { return ReturnUtil.success(iBusDeviceService.syncDeviceStatus()); } + + @ApiOperation("根据闸井id获取设备信息") + @PostMapping("/getListByWellId") + @ResponseBody + public ReturnDTO getListByWellId(@RequestBody IdDTO idDTO) { + Assert.isFalse(ObjectUtil.isEmpty(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iBusDeviceService.getListByWellId(idDTO.getId())); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java index 72a2d84..d6d9743 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java @@ -85,6 +85,7 @@ return ReturnUtil.success(iBusLedgerService.detail(idDTO.getId())); } + /** * 同步三级部门 * diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java index 9e412d2..4316b56 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java @@ -1,22 +1,33 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.response.ErrorResponseData; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; +import com.casic.missiles.modular.device.dto.BusPositionImportDTO; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.ReturnUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataAccessException; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; /** @@ -40,8 +51,44 @@ @PostMapping("/addPosition") @ResponseBody public ReturnDTO addPosition(@RequestBody BusLedgerPipe busLedgerPipe) { + + List busLedgerPipeList = iBusLedgerPipeService.getListByNumber(busLedgerPipe.getTagNumber()); + if(busLedgerPipeList!=null&&busLedgerPipeList.size()>0){ + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE,"安装位号已存!!!"); + } + Long id =IdUtil.getSnowflake(1,2).nextId(); + busLedgerPipe.setId(id); iBusLedgerPipeService.save(busLedgerPipe); - return ReturnUtil.success(busLedgerPipe.getId()); + return ReturnUtil.success(id); + } + + @ApiOperation("批量导入") + @RequestMapping(value = "/batchImport", method = RequestMethod.POST) + @ResponseBody + public Object batchImport(@RequestParam("file") MultipartFile file) { + List results = new ArrayList<>(); + try { + results = this.importExcel(BusPositionImportDTO.class, file, null, null); + List list = iBusLedgerPipeService.addPositionBatch(results); + if (!CollectionUtil.isEmpty(list)) { + //获取校验报错信息 + return new ErrorResponseData(list.get(0)); + } + } catch (Exception e) { + return catchMybatisPlusException(e, "导入位置信息失败"); + } + return ResponseData.success(); + } + + private ResponseData catchMybatisPlusException(Exception e, String errorMsg) { + if (e instanceof DataAccessException) { + DataAccessException mybatisPlusException = (DataAccessException) e; + String message = mybatisPlusException.getRootCause().getMessage(); + if (message.contains("Duplicate entry '")) { + return new ErrorResponseData("安装位号重复:" + message.replaceAll("Duplicate entry '", "").replaceAll("' for key 'DEVCODE'", "")); + } + } + return new ErrorResponseData(errorMsg); } @ApiOperation("编辑点位") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java index d1e08a8..d938876 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java @@ -51,6 +51,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getOperatorName()), "CREATE_USER", request.getOperatorName()); queryWrapper.ge(ObjectUtil.isNotEmpty(request.getStartTime()), "START_TIME", request.getStartTime()); queryWrapper.le(ObjectUtil.isNotEmpty(request.getEndTime()), "END_TIME", request.getEndTime()); + queryWrapper.orderByDesc("START_TIME"); return ReturnUtil.success(super.packForBT(iSyncLogService.page(page, queryWrapper))); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java index 5ee5291..23ddee9 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java @@ -73,4 +73,12 @@ " where bd.DEVCODE= #{devcode} and bd.VALID=1 " + ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD asc") List getDeviceTypeRule(@Param("devcode") String devcode); + + + @Select("SELECT bd.* from bus_device bd " + + "left JOIN bus_device_ledger bl on bd.id= bl.DEVICE_ID and bl.VALID=1 " + + "LEFT JOIN bus_ledger_all_view bv on bv.id= bl.LEDGER_ID and bv.type= bl.TYPE and bv.VALID=1 " + + "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") + List getListByWellId(@Param("wellId") Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java index e1d16c4..a4c3f7a 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java @@ -37,7 +37,7 @@ @Select("SELECT b.ORG_ID,b.ORG_CODE,b.ORG_NAME,b.PARENT_ID FROM `bus_sync_org_relation` b WHERE b.DEL_FLAG =0 and b.PARENT_ID = #{syncId} ") List synDept(@Param("syncId") String syncId); - @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view ") + @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view where VALID=1") List getBusLedgers(); @Select("SELECT DEVCODE FROM `bus_device` where VALID>0 ") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml index 99ef10b..c6d1fff 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml @@ -29,6 +29,7 @@ bp.DEVICE_MODEL as deviceModel, bt.TYPE_NAME as typeName, + bp.DATA_SERVICE as deviceCategory, bm.`NAME` as manufactureName, bl.tagNumber as tagNumber, bl.id as ledgerId, @@ -81,6 +82,10 @@ and bd.LOGTIME #{request.logTime2} + + and bp.DATA_SERVICE =#{request.deviceCategory} + + ORDER BY bd.INSTALL_DATE DESC diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml index bdadb6a..d3f4684 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml @@ -40,7 +40,7 @@ `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + AND bdl.VALID = 1 JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -99,8 +99,8 @@ bm.`NAME` as manufactureName FROM `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE - LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID and bdl.type=blp.type + AND bdl.VALID = 1 LEFT JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -117,7 +117,9 @@ WITH station_temp as(SELECT bl.ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID FROM `bus_ledger` bl where bl.VALID=1 and bl.TYPE =2) - select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME from station_temp bl + select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME,bd.DEVCODE from station_temp bl left join bus_device_ledger bdl on bdl.LEDGER_ID = bl.ID and bdl.TYPE =2 and bdl.valid=1 left join bus_device bd on bd.id= bdl.DEVICE_ID and bd.VALID=1 order by bl.ID diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml index 7b92b04..1d97c64 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml @@ -184,7 +184,7 @@ WHERE EQ_LOCNO like 'N%' and - EQ_CATEGORY in (1,3) + EQ_CATEGORY in (1,2,3,5) diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java index 859cf08..143b42d 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java @@ -23,6 +23,9 @@ @ApiModelProperty("设备类型id") private Long typeId; + @ApiModelProperty("产品名称") + private String productName; + @ApiModelProperty("指令集合") private List commandConfigList; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java index 646610b..2cb5894 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("最新上传结束时间") private String logTime2; + + @ApiModelProperty("设备类别(0:自有设备,1:数据服务)") + private String deviceCategory; } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java index 8c95537..28b30fa 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java @@ -44,6 +44,9 @@ @ExcelProperty("关联管线") private String pipeCode; + @ExcelProperty("监测类型") + private String monitorType; + private String watchObject; private Long deviceType; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java index 0980c34..ac5daf0 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java @@ -24,4 +24,7 @@ @ApiModelProperty("详细位置") private String position; + @ApiModelProperty("1:其他,3:管线") + private String type; + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java new file mode 100644 index 0000000..bce7ebd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.device.dto; + + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class BusPositionImportDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + + @ExcelProperty("管线编号") + private String pipeCode; + + @ExcelProperty("安装位号") + private String tagNumber; + + @ExcelProperty("经度(高德)") + private String lngGaode; + + @ExcelProperty("纬度(高德)") + private String latGaode; + + @ExcelProperty("详细位置") + private String position; + + @ExcelProperty("管理单位") + private Long deptid; + + @ExcelProperty("位置类别") + private String type; + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java new file mode 100644 index 0000000..fc881a1 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.data.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 外协管盯 前端控制器 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RestController +@RequestMapping("/system/dataGasOther") +public class DataGasOtherController { + +} + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java new file mode 100644 index 0000000..b5f3627 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.data.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 外协管盯 Mapper 接口 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Mapper +public interface DataGasOtherMapper extends BaseMapper { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml new file mode 100644 index 0000000..8ce1455 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID, DEVCODE, WELL_CODE, WELL_NUMBER, GASVAL, VBAT, BATSTA, SIN, RSRP, SINR, UPTIME, LOGTIME, SIG, TEMP, SS_STATE + + + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java new file mode 100644 index 0000000..53972ba --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java @@ -0,0 +1,94 @@ +package com.casic.missiles.modular.data.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 外协管盯 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Builder +@Data +@TableName("data_gas_other") +@ApiModel(value = "DataGasOther对象", description = "外协管盯") +public class DataGasOther implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId("ID") + private Long id; + + @ApiModelProperty("设备编号") + @TableField("DEVCODE") + private String devcode; + + @ApiModelProperty("点位编号") + @TableField("WELL_CODE") + private String wellCode; + + @ApiModelProperty("位号") + @TableField("WELL_NUMBER") + private String wellNumber; + + @ApiModelProperty("气体浓度采样值") + @TableField("GASVAL") + private String gasval; + + @ApiModelProperty("设备电池电压值(毫伏)") + @TableField("VBAT") + private String vbat; + + @ApiModelProperty("电池状态0 正常、 1 低电告警、2 关机") + @TableField("BATSTA") + private String batsta; + + @ApiModelProperty("接收信号强度等级") + @TableField("SIN") + private String sin; + + @ApiModelProperty("接收信号参考质量 服务小 区的 RSRP 值") + @TableField("RSRP") + private String rsrp; + + @ApiModelProperty("信噪比") + @TableField("SINR") + private String sinr; + + @ApiModelProperty("采集时间") + @TableField("UPTIME") + private Date uptime; + + @ApiModelProperty("上传时间") + @TableField("LOGTIME") + private Date logtime; + + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态,0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java index 86077b8..f4d4417 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java @@ -76,4 +76,17 @@ private Date logtime; + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态:0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java new file mode 100644 index 0000000..842ca0b --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.data.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.data.entity.DataGasOther; + +/** + *

+ * 外协管盯 服务类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +public interface IDataGasOtherService extends IService { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java new file mode 100644 index 0000000..4c660e9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java @@ -0,0 +1,226 @@ +package com.casic.missiles.modular.data.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.enums.DeviceTypeEnum; +import com.casic.missiles.enums.DictEnum; +import com.casic.missiles.modular.alarm.dto.AlarmDeviceRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.AlarmRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.BusAlarmLedgerDTO; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.data.dao.DataGasMapper; +import com.casic.missiles.modular.data.dao.DataGasOtherMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import com.casic.missiles.modular.data.entity.DataTubeOther; +import com.casic.missiles.modular.data.service.IDataAbstractService; +import com.casic.missiles.modular.data.service.IDataGasOtherService; +import com.casic.missiles.modular.data.service.ITrackLogService; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Optional; + +/** + *

+ * 外协管盯 服务实现类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RequiredArgsConstructor +@Service +public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { + + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + private final DataGasMapper dataGasMapper; + private final IAlarmRecordsService alarmRecordsService; + private final IAlarmRuleService alarmRuleService; + private final ITrackLogService iTrackLogService; + private final IBusDeviceService busDeviceService; + + @Override + public void process(String dataContent) { + + //解析数据+根据业务处理存储数据 + JSONObject json = JSONObject.parseObject(dataContent); + String devCode = json.get("devCode").toString(); + JSONObject jsonObject = json.getJSONObject("mBody"); + if (mType[0].equals(json.get("mType")) || mType[3].equals(json.get("mType"))) {//存储上报数据 + this.processNormalData(jsonObject, devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + this.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.TubeOther.name().equals(json.get("devType"))) { + if ("TubeOtherConfigSuccess".equals(jsonObject.get("bType"))) { +// deviceConfigManager.updateStatus(devCode); + } + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } else if (mType[4].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); +// imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; + try { + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); + } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + } + } + + @Transactional + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.getString("cell"); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = jsonObject.getJSONArray("datas"); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + String bfcf = busDeviceService.getBfcf(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).getString("gasval"); + String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); + String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); + String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataGasOther.builder() + .wellCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .wellNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .devcode(devCode) +// .cell(cell) + .gasval(gas) + .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime))) + .logtime(new Date()) + .vbat(vbat) + .batsta(batsta) + .rsrp(rsrp) + .sin(pci) + .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) + .build());//存储采集数据 + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) continue; + + //3.清除设备告警 + alarmRecordsService.cancelDeviceAlarm(devCode); + //4.存报警 + //若没绑定井,则不产生报警 + boolean alarmFlag = false; + if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { + //获取报警规则 + List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); + for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { + if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && + Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { + alarmFlag = true; + //写入报警 + //1、判断报警是否已存在 + if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.TubeOther.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); + //7.更新管线状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java index d248540..b33a1ee 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java @@ -91,7 +91,6 @@ } - public List getBusAlarmLedgerList(String devCode) { return this.dataGasMapper.getListByDevCode(devCode); } @@ -113,6 +112,13 @@ for (int i = 0; i < jsonArray.size(); i++) { try { String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) .findFirst(); @@ -175,18 +181,18 @@ alarmRecordsService.cancelDeviceAlarm(devCode); //4.存报警 //若没绑定井,则不产生报警 - boolean alarmFlag = false; + boolean alarmFlag = false; if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { //获取报警规则 List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { - alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); } break; } @@ -197,7 +203,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及设备状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新监测井状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java index e848fce..6297093 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java @@ -84,42 +84,78 @@ } - @Transactional - public void processAlarmData(JSONObject jsonObject, String devCode) { - JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + public void processEventAlarm(String devCode, String eventTypeCode, String logTime, String eventValue) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - //获取报警事件 - List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - - List busWellDTOList = dataGasMapper.getListByDevCode(devCode); - //若没绑定井,则不产生报警 - if (busWellDTOList != null && busWellDTOList.size() > 0) { - - for (int i = 0; i < jsonArray.size(); i++) { + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + //特殊处理消警 + if ("0".equals(eventValue)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, eventTypeCode); + } + return; } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> eventTypeCode.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 - if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + if (!alarmDeviceRuleResponseDTO.isPresent()) return; //1.查询是否已存在该类报警 - if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) return; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); - - + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + } + } + } + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + try { + String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmEventCode)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } } } } @@ -169,7 +205,76 @@ .rightVibrateAlarm(VibR) .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(uptime))) .logtime(new Date()) - .build());//存储采集数据 + .build()); + + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + ruleResponseDTOList.forEach(ruleResponseDTO -> { + + if ("Sloping".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Sloping)&&(!alarmRecordsService.isWatchAlarms(devCode,"Sloping"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Sloping", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Sloping)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Sloping"); + + } + } + if ("Destroy".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Destroy)&&(!alarmRecordsService.isWatchAlarms(devCode,"Destroy"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Destroy", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Destroy)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Destroy"); + + } + } + if ("Leak".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Leak)&&(!alarmRecordsService.isWatchAlarms(devCode,"Leak"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Leak", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Leak)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Leak"); + + } + } + if ("DiscL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscL)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscL"); + + } + } + if ("DiscR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscR)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscR"); + } + } + + if ("VibL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibL)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibL"); + } + } + if ("VibR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibR)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibR"); + } + } + }); + +// //处理报警事件 +// processEventAlarm(devCode,"Sloping",uptime,Sloping); +// processEventAlarm(devCode,"Destroy",uptime,Destroy); +// processEventAlarm(devCode,"Leak",uptime,Leak); +// processEventAlarm(devCode,"DiscL",uptime,DiscL); +// processEventAlarm(devCode,"DiscR",uptime,DiscR); +// processEventAlarm(devCode,"VibL",uptime,VibL); +// processEventAlarm(devCode,"VibR",uptime,VibR); + //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -197,7 +302,7 @@ if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && gas >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), gas)) { @@ -213,7 +318,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R,alarmFlag?"燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R, alarmFlag ? "燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java index f913775..895d201 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java @@ -89,6 +89,7 @@ String bfcf = busDeviceService.getBfcf(devCode); if (DictEnum.BF_ON.equals(bfcf)) { JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); //获取报警事件 List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); List busWellDTOList = dataGasMapper.getListByDevCode(devCode); @@ -96,25 +97,43 @@ if (busWellDTOList != null && busWellDTOList.size() > 0) { for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 if (!alarmDeviceRuleResponseDTO.isPresent()) continue; //1.查询是否已存在该类报警 if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { @@ -141,6 +160,9 @@ String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); gas = String.format("%.2f", Double.valueOf(gas)); //1.存数据 save(DataTubeOther.builder() @@ -156,6 +178,9 @@ .rsrp(rsrp) .sin(pci) .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) .build());//存储采集数据 //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -186,7 +211,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 98e736b..2288075 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -216,5 +216,15 @@ public ReturnDTO syncDeviceStatus() { return ReturnUtil.success(iBusDeviceService.syncDeviceStatus()); } + + @ApiOperation("根据闸井id获取设备信息") + @PostMapping("/getListByWellId") + @ResponseBody + public ReturnDTO getListByWellId(@RequestBody IdDTO idDTO) { + Assert.isFalse(ObjectUtil.isEmpty(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iBusDeviceService.getListByWellId(idDTO.getId())); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java index 72a2d84..d6d9743 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java @@ -85,6 +85,7 @@ return ReturnUtil.success(iBusLedgerService.detail(idDTO.getId())); } + /** * 同步三级部门 * diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java index 9e412d2..4316b56 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java @@ -1,22 +1,33 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.response.ErrorResponseData; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; +import com.casic.missiles.modular.device.dto.BusPositionImportDTO; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.ReturnUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataAccessException; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; /** @@ -40,8 +51,44 @@ @PostMapping("/addPosition") @ResponseBody public ReturnDTO addPosition(@RequestBody BusLedgerPipe busLedgerPipe) { + + List busLedgerPipeList = iBusLedgerPipeService.getListByNumber(busLedgerPipe.getTagNumber()); + if(busLedgerPipeList!=null&&busLedgerPipeList.size()>0){ + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE,"安装位号已存!!!"); + } + Long id =IdUtil.getSnowflake(1,2).nextId(); + busLedgerPipe.setId(id); iBusLedgerPipeService.save(busLedgerPipe); - return ReturnUtil.success(busLedgerPipe.getId()); + return ReturnUtil.success(id); + } + + @ApiOperation("批量导入") + @RequestMapping(value = "/batchImport", method = RequestMethod.POST) + @ResponseBody + public Object batchImport(@RequestParam("file") MultipartFile file) { + List results = new ArrayList<>(); + try { + results = this.importExcel(BusPositionImportDTO.class, file, null, null); + List list = iBusLedgerPipeService.addPositionBatch(results); + if (!CollectionUtil.isEmpty(list)) { + //获取校验报错信息 + return new ErrorResponseData(list.get(0)); + } + } catch (Exception e) { + return catchMybatisPlusException(e, "导入位置信息失败"); + } + return ResponseData.success(); + } + + private ResponseData catchMybatisPlusException(Exception e, String errorMsg) { + if (e instanceof DataAccessException) { + DataAccessException mybatisPlusException = (DataAccessException) e; + String message = mybatisPlusException.getRootCause().getMessage(); + if (message.contains("Duplicate entry '")) { + return new ErrorResponseData("安装位号重复:" + message.replaceAll("Duplicate entry '", "").replaceAll("' for key 'DEVCODE'", "")); + } + } + return new ErrorResponseData(errorMsg); } @ApiOperation("编辑点位") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java index d1e08a8..d938876 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java @@ -51,6 +51,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getOperatorName()), "CREATE_USER", request.getOperatorName()); queryWrapper.ge(ObjectUtil.isNotEmpty(request.getStartTime()), "START_TIME", request.getStartTime()); queryWrapper.le(ObjectUtil.isNotEmpty(request.getEndTime()), "END_TIME", request.getEndTime()); + queryWrapper.orderByDesc("START_TIME"); return ReturnUtil.success(super.packForBT(iSyncLogService.page(page, queryWrapper))); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java index 5ee5291..23ddee9 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java @@ -73,4 +73,12 @@ " where bd.DEVCODE= #{devcode} and bd.VALID=1 " + ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD asc") List getDeviceTypeRule(@Param("devcode") String devcode); + + + @Select("SELECT bd.* from bus_device bd " + + "left JOIN bus_device_ledger bl on bd.id= bl.DEVICE_ID and bl.VALID=1 " + + "LEFT JOIN bus_ledger_all_view bv on bv.id= bl.LEDGER_ID and bv.type= bl.TYPE and bv.VALID=1 " + + "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") + List getListByWellId(@Param("wellId") Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java index e1d16c4..a4c3f7a 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java @@ -37,7 +37,7 @@ @Select("SELECT b.ORG_ID,b.ORG_CODE,b.ORG_NAME,b.PARENT_ID FROM `bus_sync_org_relation` b WHERE b.DEL_FLAG =0 and b.PARENT_ID = #{syncId} ") List synDept(@Param("syncId") String syncId); - @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view ") + @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view where VALID=1") List getBusLedgers(); @Select("SELECT DEVCODE FROM `bus_device` where VALID>0 ") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml index 99ef10b..c6d1fff 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml @@ -29,6 +29,7 @@ bp.DEVICE_MODEL as deviceModel, bt.TYPE_NAME as typeName, + bp.DATA_SERVICE as deviceCategory, bm.`NAME` as manufactureName, bl.tagNumber as tagNumber, bl.id as ledgerId, @@ -81,6 +82,10 @@ and bd.LOGTIME #{request.logTime2} + + and bp.DATA_SERVICE =#{request.deviceCategory} + + ORDER BY bd.INSTALL_DATE DESC diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml index bdadb6a..d3f4684 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml @@ -40,7 +40,7 @@ `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + AND bdl.VALID = 1 JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -99,8 +99,8 @@ bm.`NAME` as manufactureName FROM `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE - LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID and bdl.type=blp.type + AND bdl.VALID = 1 LEFT JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -117,7 +117,9 @@ WITH station_temp as(SELECT bl.ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID FROM `bus_ledger` bl where bl.VALID=1 and bl.TYPE =2) - select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME from station_temp bl + select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME,bd.DEVCODE from station_temp bl left join bus_device_ledger bdl on bdl.LEDGER_ID = bl.ID and bdl.TYPE =2 and bdl.valid=1 left join bus_device bd on bd.id= bdl.DEVICE_ID and bd.VALID=1 order by bl.ID diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml index 7b92b04..1d97c64 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml @@ -184,7 +184,7 @@ WHERE EQ_LOCNO like 'N%' and - EQ_CATEGORY in (1,3) + EQ_CATEGORY in (1,2,3,5) diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java index 859cf08..143b42d 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java @@ -23,6 +23,9 @@ @ApiModelProperty("设备类型id") private Long typeId; + @ApiModelProperty("产品名称") + private String productName; + @ApiModelProperty("指令集合") private List commandConfigList; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java index 646610b..2cb5894 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("最新上传结束时间") private String logTime2; + + @ApiModelProperty("设备类别(0:自有设备,1:数据服务)") + private String deviceCategory; } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java index 8c95537..28b30fa 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java @@ -44,6 +44,9 @@ @ExcelProperty("关联管线") private String pipeCode; + @ExcelProperty("监测类型") + private String monitorType; + private String watchObject; private Long deviceType; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java index 0980c34..ac5daf0 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java @@ -24,4 +24,7 @@ @ApiModelProperty("详细位置") private String position; + @ApiModelProperty("1:其他,3:管线") + private String type; + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java new file mode 100644 index 0000000..bce7ebd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.device.dto; + + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class BusPositionImportDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + + @ExcelProperty("管线编号") + private String pipeCode; + + @ExcelProperty("安装位号") + private String tagNumber; + + @ExcelProperty("经度(高德)") + private String lngGaode; + + @ExcelProperty("纬度(高德)") + private String latGaode; + + @ExcelProperty("详细位置") + private String position; + + @ExcelProperty("管理单位") + private Long deptid; + + @ExcelProperty("位置类别") + private String type; + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java index 58faa0e..d72ae78 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java @@ -16,13 +16,13 @@ private String deviceId; //移动命令:left right up down left_up left_down right_up right_down GOTO_PRESET - @ApiModelProperty("移动命令") + @ApiModelProperty("移动命令(left right up down left_up left_down right_up right_down)") private String command; - @ApiModelProperty("速度") + @ApiModelProperty("速度,一般传100") private String speed; - @ApiModelProperty("启停命令") + @ApiModelProperty("启停命令(0:开始,1:结束)") private String cameraAction; @ApiModelProperty("预置点编号") diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java new file mode 100644 index 0000000..fc881a1 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.data.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 外协管盯 前端控制器 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RestController +@RequestMapping("/system/dataGasOther") +public class DataGasOtherController { + +} + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java new file mode 100644 index 0000000..b5f3627 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.data.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 外协管盯 Mapper 接口 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Mapper +public interface DataGasOtherMapper extends BaseMapper { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml new file mode 100644 index 0000000..8ce1455 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID, DEVCODE, WELL_CODE, WELL_NUMBER, GASVAL, VBAT, BATSTA, SIN, RSRP, SINR, UPTIME, LOGTIME, SIG, TEMP, SS_STATE + + + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java new file mode 100644 index 0000000..53972ba --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java @@ -0,0 +1,94 @@ +package com.casic.missiles.modular.data.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 外协管盯 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Builder +@Data +@TableName("data_gas_other") +@ApiModel(value = "DataGasOther对象", description = "外协管盯") +public class DataGasOther implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId("ID") + private Long id; + + @ApiModelProperty("设备编号") + @TableField("DEVCODE") + private String devcode; + + @ApiModelProperty("点位编号") + @TableField("WELL_CODE") + private String wellCode; + + @ApiModelProperty("位号") + @TableField("WELL_NUMBER") + private String wellNumber; + + @ApiModelProperty("气体浓度采样值") + @TableField("GASVAL") + private String gasval; + + @ApiModelProperty("设备电池电压值(毫伏)") + @TableField("VBAT") + private String vbat; + + @ApiModelProperty("电池状态0 正常、 1 低电告警、2 关机") + @TableField("BATSTA") + private String batsta; + + @ApiModelProperty("接收信号强度等级") + @TableField("SIN") + private String sin; + + @ApiModelProperty("接收信号参考质量 服务小 区的 RSRP 值") + @TableField("RSRP") + private String rsrp; + + @ApiModelProperty("信噪比") + @TableField("SINR") + private String sinr; + + @ApiModelProperty("采集时间") + @TableField("UPTIME") + private Date uptime; + + @ApiModelProperty("上传时间") + @TableField("LOGTIME") + private Date logtime; + + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态,0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java index 86077b8..f4d4417 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java @@ -76,4 +76,17 @@ private Date logtime; + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态:0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java new file mode 100644 index 0000000..842ca0b --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.data.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.data.entity.DataGasOther; + +/** + *

+ * 外协管盯 服务类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +public interface IDataGasOtherService extends IService { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java new file mode 100644 index 0000000..4c660e9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java @@ -0,0 +1,226 @@ +package com.casic.missiles.modular.data.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.enums.DeviceTypeEnum; +import com.casic.missiles.enums.DictEnum; +import com.casic.missiles.modular.alarm.dto.AlarmDeviceRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.AlarmRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.BusAlarmLedgerDTO; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.data.dao.DataGasMapper; +import com.casic.missiles.modular.data.dao.DataGasOtherMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import com.casic.missiles.modular.data.entity.DataTubeOther; +import com.casic.missiles.modular.data.service.IDataAbstractService; +import com.casic.missiles.modular.data.service.IDataGasOtherService; +import com.casic.missiles.modular.data.service.ITrackLogService; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Optional; + +/** + *

+ * 外协管盯 服务实现类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RequiredArgsConstructor +@Service +public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { + + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + private final DataGasMapper dataGasMapper; + private final IAlarmRecordsService alarmRecordsService; + private final IAlarmRuleService alarmRuleService; + private final ITrackLogService iTrackLogService; + private final IBusDeviceService busDeviceService; + + @Override + public void process(String dataContent) { + + //解析数据+根据业务处理存储数据 + JSONObject json = JSONObject.parseObject(dataContent); + String devCode = json.get("devCode").toString(); + JSONObject jsonObject = json.getJSONObject("mBody"); + if (mType[0].equals(json.get("mType")) || mType[3].equals(json.get("mType"))) {//存储上报数据 + this.processNormalData(jsonObject, devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + this.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.TubeOther.name().equals(json.get("devType"))) { + if ("TubeOtherConfigSuccess".equals(jsonObject.get("bType"))) { +// deviceConfigManager.updateStatus(devCode); + } + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } else if (mType[4].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); +// imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; + try { + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); + } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + } + } + + @Transactional + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.getString("cell"); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = jsonObject.getJSONArray("datas"); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + String bfcf = busDeviceService.getBfcf(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).getString("gasval"); + String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); + String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); + String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataGasOther.builder() + .wellCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .wellNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .devcode(devCode) +// .cell(cell) + .gasval(gas) + .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime))) + .logtime(new Date()) + .vbat(vbat) + .batsta(batsta) + .rsrp(rsrp) + .sin(pci) + .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) + .build());//存储采集数据 + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) continue; + + //3.清除设备告警 + alarmRecordsService.cancelDeviceAlarm(devCode); + //4.存报警 + //若没绑定井,则不产生报警 + boolean alarmFlag = false; + if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { + //获取报警规则 + List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); + for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { + if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && + Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { + alarmFlag = true; + //写入报警 + //1、判断报警是否已存在 + if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.TubeOther.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); + //7.更新管线状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java index d248540..b33a1ee 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java @@ -91,7 +91,6 @@ } - public List getBusAlarmLedgerList(String devCode) { return this.dataGasMapper.getListByDevCode(devCode); } @@ -113,6 +112,13 @@ for (int i = 0; i < jsonArray.size(); i++) { try { String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) .findFirst(); @@ -175,18 +181,18 @@ alarmRecordsService.cancelDeviceAlarm(devCode); //4.存报警 //若没绑定井,则不产生报警 - boolean alarmFlag = false; + boolean alarmFlag = false; if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { //获取报警规则 List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { - alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); } break; } @@ -197,7 +203,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及设备状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新监测井状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java index e848fce..6297093 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java @@ -84,42 +84,78 @@ } - @Transactional - public void processAlarmData(JSONObject jsonObject, String devCode) { - JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + public void processEventAlarm(String devCode, String eventTypeCode, String logTime, String eventValue) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - //获取报警事件 - List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - - List busWellDTOList = dataGasMapper.getListByDevCode(devCode); - //若没绑定井,则不产生报警 - if (busWellDTOList != null && busWellDTOList.size() > 0) { - - for (int i = 0; i < jsonArray.size(); i++) { + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + //特殊处理消警 + if ("0".equals(eventValue)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, eventTypeCode); + } + return; } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> eventTypeCode.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 - if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + if (!alarmDeviceRuleResponseDTO.isPresent()) return; //1.查询是否已存在该类报警 - if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) return; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); - - + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + } + } + } + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + try { + String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmEventCode)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } } } } @@ -169,7 +205,76 @@ .rightVibrateAlarm(VibR) .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(uptime))) .logtime(new Date()) - .build());//存储采集数据 + .build()); + + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + ruleResponseDTOList.forEach(ruleResponseDTO -> { + + if ("Sloping".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Sloping)&&(!alarmRecordsService.isWatchAlarms(devCode,"Sloping"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Sloping", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Sloping)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Sloping"); + + } + } + if ("Destroy".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Destroy)&&(!alarmRecordsService.isWatchAlarms(devCode,"Destroy"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Destroy", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Destroy)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Destroy"); + + } + } + if ("Leak".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Leak)&&(!alarmRecordsService.isWatchAlarms(devCode,"Leak"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Leak", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Leak)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Leak"); + + } + } + if ("DiscL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscL)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscL"); + + } + } + if ("DiscR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscR)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscR"); + } + } + + if ("VibL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibL)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibL"); + } + } + if ("VibR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibR)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibR"); + } + } + }); + +// //处理报警事件 +// processEventAlarm(devCode,"Sloping",uptime,Sloping); +// processEventAlarm(devCode,"Destroy",uptime,Destroy); +// processEventAlarm(devCode,"Leak",uptime,Leak); +// processEventAlarm(devCode,"DiscL",uptime,DiscL); +// processEventAlarm(devCode,"DiscR",uptime,DiscR); +// processEventAlarm(devCode,"VibL",uptime,VibL); +// processEventAlarm(devCode,"VibR",uptime,VibR); + //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -197,7 +302,7 @@ if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && gas >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), gas)) { @@ -213,7 +318,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R,alarmFlag?"燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R, alarmFlag ? "燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java index f913775..895d201 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java @@ -89,6 +89,7 @@ String bfcf = busDeviceService.getBfcf(devCode); if (DictEnum.BF_ON.equals(bfcf)) { JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); //获取报警事件 List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); List busWellDTOList = dataGasMapper.getListByDevCode(devCode); @@ -96,25 +97,43 @@ if (busWellDTOList != null && busWellDTOList.size() > 0) { for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 if (!alarmDeviceRuleResponseDTO.isPresent()) continue; //1.查询是否已存在该类报警 if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { @@ -141,6 +160,9 @@ String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); gas = String.format("%.2f", Double.valueOf(gas)); //1.存数据 save(DataTubeOther.builder() @@ -156,6 +178,9 @@ .rsrp(rsrp) .sin(pci) .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) .build());//存储采集数据 //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -186,7 +211,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 98e736b..2288075 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -216,5 +216,15 @@ public ReturnDTO syncDeviceStatus() { return ReturnUtil.success(iBusDeviceService.syncDeviceStatus()); } + + @ApiOperation("根据闸井id获取设备信息") + @PostMapping("/getListByWellId") + @ResponseBody + public ReturnDTO getListByWellId(@RequestBody IdDTO idDTO) { + Assert.isFalse(ObjectUtil.isEmpty(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iBusDeviceService.getListByWellId(idDTO.getId())); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java index 72a2d84..d6d9743 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java @@ -85,6 +85,7 @@ return ReturnUtil.success(iBusLedgerService.detail(idDTO.getId())); } + /** * 同步三级部门 * diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java index 9e412d2..4316b56 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java @@ -1,22 +1,33 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.response.ErrorResponseData; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; +import com.casic.missiles.modular.device.dto.BusPositionImportDTO; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.ReturnUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataAccessException; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; /** @@ -40,8 +51,44 @@ @PostMapping("/addPosition") @ResponseBody public ReturnDTO addPosition(@RequestBody BusLedgerPipe busLedgerPipe) { + + List busLedgerPipeList = iBusLedgerPipeService.getListByNumber(busLedgerPipe.getTagNumber()); + if(busLedgerPipeList!=null&&busLedgerPipeList.size()>0){ + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE,"安装位号已存!!!"); + } + Long id =IdUtil.getSnowflake(1,2).nextId(); + busLedgerPipe.setId(id); iBusLedgerPipeService.save(busLedgerPipe); - return ReturnUtil.success(busLedgerPipe.getId()); + return ReturnUtil.success(id); + } + + @ApiOperation("批量导入") + @RequestMapping(value = "/batchImport", method = RequestMethod.POST) + @ResponseBody + public Object batchImport(@RequestParam("file") MultipartFile file) { + List results = new ArrayList<>(); + try { + results = this.importExcel(BusPositionImportDTO.class, file, null, null); + List list = iBusLedgerPipeService.addPositionBatch(results); + if (!CollectionUtil.isEmpty(list)) { + //获取校验报错信息 + return new ErrorResponseData(list.get(0)); + } + } catch (Exception e) { + return catchMybatisPlusException(e, "导入位置信息失败"); + } + return ResponseData.success(); + } + + private ResponseData catchMybatisPlusException(Exception e, String errorMsg) { + if (e instanceof DataAccessException) { + DataAccessException mybatisPlusException = (DataAccessException) e; + String message = mybatisPlusException.getRootCause().getMessage(); + if (message.contains("Duplicate entry '")) { + return new ErrorResponseData("安装位号重复:" + message.replaceAll("Duplicate entry '", "").replaceAll("' for key 'DEVCODE'", "")); + } + } + return new ErrorResponseData(errorMsg); } @ApiOperation("编辑点位") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java index d1e08a8..d938876 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java @@ -51,6 +51,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getOperatorName()), "CREATE_USER", request.getOperatorName()); queryWrapper.ge(ObjectUtil.isNotEmpty(request.getStartTime()), "START_TIME", request.getStartTime()); queryWrapper.le(ObjectUtil.isNotEmpty(request.getEndTime()), "END_TIME", request.getEndTime()); + queryWrapper.orderByDesc("START_TIME"); return ReturnUtil.success(super.packForBT(iSyncLogService.page(page, queryWrapper))); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java index 5ee5291..23ddee9 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java @@ -73,4 +73,12 @@ " where bd.DEVCODE= #{devcode} and bd.VALID=1 " + ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD asc") List getDeviceTypeRule(@Param("devcode") String devcode); + + + @Select("SELECT bd.* from bus_device bd " + + "left JOIN bus_device_ledger bl on bd.id= bl.DEVICE_ID and bl.VALID=1 " + + "LEFT JOIN bus_ledger_all_view bv on bv.id= bl.LEDGER_ID and bv.type= bl.TYPE and bv.VALID=1 " + + "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") + List getListByWellId(@Param("wellId") Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java index e1d16c4..a4c3f7a 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java @@ -37,7 +37,7 @@ @Select("SELECT b.ORG_ID,b.ORG_CODE,b.ORG_NAME,b.PARENT_ID FROM `bus_sync_org_relation` b WHERE b.DEL_FLAG =0 and b.PARENT_ID = #{syncId} ") List synDept(@Param("syncId") String syncId); - @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view ") + @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view where VALID=1") List getBusLedgers(); @Select("SELECT DEVCODE FROM `bus_device` where VALID>0 ") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml index 99ef10b..c6d1fff 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml @@ -29,6 +29,7 @@ bp.DEVICE_MODEL as deviceModel, bt.TYPE_NAME as typeName, + bp.DATA_SERVICE as deviceCategory, bm.`NAME` as manufactureName, bl.tagNumber as tagNumber, bl.id as ledgerId, @@ -81,6 +82,10 @@ and bd.LOGTIME #{request.logTime2} + + and bp.DATA_SERVICE =#{request.deviceCategory} + + ORDER BY bd.INSTALL_DATE DESC diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml index bdadb6a..d3f4684 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml @@ -40,7 +40,7 @@ `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + AND bdl.VALID = 1 JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -99,8 +99,8 @@ bm.`NAME` as manufactureName FROM `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE - LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID and bdl.type=blp.type + AND bdl.VALID = 1 LEFT JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -117,7 +117,9 @@ WITH station_temp as(SELECT bl.ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID FROM `bus_ledger` bl where bl.VALID=1 and bl.TYPE =2) - select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME from station_temp bl + select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME,bd.DEVCODE from station_temp bl left join bus_device_ledger bdl on bdl.LEDGER_ID = bl.ID and bdl.TYPE =2 and bdl.valid=1 left join bus_device bd on bd.id= bdl.DEVICE_ID and bd.VALID=1 order by bl.ID diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml index 7b92b04..1d97c64 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml @@ -184,7 +184,7 @@ WHERE EQ_LOCNO like 'N%' and - EQ_CATEGORY in (1,3) + EQ_CATEGORY in (1,2,3,5) diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java index 859cf08..143b42d 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java @@ -23,6 +23,9 @@ @ApiModelProperty("设备类型id") private Long typeId; + @ApiModelProperty("产品名称") + private String productName; + @ApiModelProperty("指令集合") private List commandConfigList; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java index 646610b..2cb5894 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("最新上传结束时间") private String logTime2; + + @ApiModelProperty("设备类别(0:自有设备,1:数据服务)") + private String deviceCategory; } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java index 8c95537..28b30fa 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java @@ -44,6 +44,9 @@ @ExcelProperty("关联管线") private String pipeCode; + @ExcelProperty("监测类型") + private String monitorType; + private String watchObject; private Long deviceType; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java index 0980c34..ac5daf0 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java @@ -24,4 +24,7 @@ @ApiModelProperty("详细位置") private String position; + @ApiModelProperty("1:其他,3:管线") + private String type; + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java new file mode 100644 index 0000000..bce7ebd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.device.dto; + + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class BusPositionImportDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + + @ExcelProperty("管线编号") + private String pipeCode; + + @ExcelProperty("安装位号") + private String tagNumber; + + @ExcelProperty("经度(高德)") + private String lngGaode; + + @ExcelProperty("纬度(高德)") + private String latGaode; + + @ExcelProperty("详细位置") + private String position; + + @ExcelProperty("管理单位") + private Long deptid; + + @ExcelProperty("位置类别") + private String type; + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java index 58faa0e..d72ae78 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java @@ -16,13 +16,13 @@ private String deviceId; //移动命令:left right up down left_up left_down right_up right_down GOTO_PRESET - @ApiModelProperty("移动命令") + @ApiModelProperty("移动命令(left right up down left_up left_down right_up right_down)") private String command; - @ApiModelProperty("速度") + @ApiModelProperty("速度,一般传100") private String speed; - @ApiModelProperty("启停命令") + @ApiModelProperty("启停命令(0:开始,1:结束)") private String cameraAction; @ApiModelProperty("预置点编号") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java index b4ec73c..5a3d0b0 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java @@ -66,7 +66,7 @@ private String powerSupplyMode; - @ApiModelProperty("是否结束数据服务") + @ApiModelProperty("是否结束数据服务(1:是,0:否)") @TableField("DATA_SERVICE") private String dataService; diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java new file mode 100644 index 0000000..fc881a1 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.data.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 外协管盯 前端控制器 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RestController +@RequestMapping("/system/dataGasOther") +public class DataGasOtherController { + +} + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java new file mode 100644 index 0000000..b5f3627 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.data.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 外协管盯 Mapper 接口 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Mapper +public interface DataGasOtherMapper extends BaseMapper { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml new file mode 100644 index 0000000..8ce1455 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID, DEVCODE, WELL_CODE, WELL_NUMBER, GASVAL, VBAT, BATSTA, SIN, RSRP, SINR, UPTIME, LOGTIME, SIG, TEMP, SS_STATE + + + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java new file mode 100644 index 0000000..53972ba --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java @@ -0,0 +1,94 @@ +package com.casic.missiles.modular.data.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 外协管盯 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Builder +@Data +@TableName("data_gas_other") +@ApiModel(value = "DataGasOther对象", description = "外协管盯") +public class DataGasOther implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId("ID") + private Long id; + + @ApiModelProperty("设备编号") + @TableField("DEVCODE") + private String devcode; + + @ApiModelProperty("点位编号") + @TableField("WELL_CODE") + private String wellCode; + + @ApiModelProperty("位号") + @TableField("WELL_NUMBER") + private String wellNumber; + + @ApiModelProperty("气体浓度采样值") + @TableField("GASVAL") + private String gasval; + + @ApiModelProperty("设备电池电压值(毫伏)") + @TableField("VBAT") + private String vbat; + + @ApiModelProperty("电池状态0 正常、 1 低电告警、2 关机") + @TableField("BATSTA") + private String batsta; + + @ApiModelProperty("接收信号强度等级") + @TableField("SIN") + private String sin; + + @ApiModelProperty("接收信号参考质量 服务小 区的 RSRP 值") + @TableField("RSRP") + private String rsrp; + + @ApiModelProperty("信噪比") + @TableField("SINR") + private String sinr; + + @ApiModelProperty("采集时间") + @TableField("UPTIME") + private Date uptime; + + @ApiModelProperty("上传时间") + @TableField("LOGTIME") + private Date logtime; + + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态,0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java index 86077b8..f4d4417 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java @@ -76,4 +76,17 @@ private Date logtime; + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态:0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java new file mode 100644 index 0000000..842ca0b --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.data.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.data.entity.DataGasOther; + +/** + *

+ * 外协管盯 服务类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +public interface IDataGasOtherService extends IService { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java new file mode 100644 index 0000000..4c660e9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java @@ -0,0 +1,226 @@ +package com.casic.missiles.modular.data.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.enums.DeviceTypeEnum; +import com.casic.missiles.enums.DictEnum; +import com.casic.missiles.modular.alarm.dto.AlarmDeviceRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.AlarmRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.BusAlarmLedgerDTO; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.data.dao.DataGasMapper; +import com.casic.missiles.modular.data.dao.DataGasOtherMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import com.casic.missiles.modular.data.entity.DataTubeOther; +import com.casic.missiles.modular.data.service.IDataAbstractService; +import com.casic.missiles.modular.data.service.IDataGasOtherService; +import com.casic.missiles.modular.data.service.ITrackLogService; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Optional; + +/** + *

+ * 外协管盯 服务实现类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RequiredArgsConstructor +@Service +public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { + + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + private final DataGasMapper dataGasMapper; + private final IAlarmRecordsService alarmRecordsService; + private final IAlarmRuleService alarmRuleService; + private final ITrackLogService iTrackLogService; + private final IBusDeviceService busDeviceService; + + @Override + public void process(String dataContent) { + + //解析数据+根据业务处理存储数据 + JSONObject json = JSONObject.parseObject(dataContent); + String devCode = json.get("devCode").toString(); + JSONObject jsonObject = json.getJSONObject("mBody"); + if (mType[0].equals(json.get("mType")) || mType[3].equals(json.get("mType"))) {//存储上报数据 + this.processNormalData(jsonObject, devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + this.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.TubeOther.name().equals(json.get("devType"))) { + if ("TubeOtherConfigSuccess".equals(jsonObject.get("bType"))) { +// deviceConfigManager.updateStatus(devCode); + } + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } else if (mType[4].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); +// imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; + try { + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); + } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + } + } + + @Transactional + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.getString("cell"); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = jsonObject.getJSONArray("datas"); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + String bfcf = busDeviceService.getBfcf(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).getString("gasval"); + String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); + String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); + String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataGasOther.builder() + .wellCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .wellNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .devcode(devCode) +// .cell(cell) + .gasval(gas) + .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime))) + .logtime(new Date()) + .vbat(vbat) + .batsta(batsta) + .rsrp(rsrp) + .sin(pci) + .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) + .build());//存储采集数据 + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) continue; + + //3.清除设备告警 + alarmRecordsService.cancelDeviceAlarm(devCode); + //4.存报警 + //若没绑定井,则不产生报警 + boolean alarmFlag = false; + if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { + //获取报警规则 + List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); + for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { + if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && + Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { + alarmFlag = true; + //写入报警 + //1、判断报警是否已存在 + if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.TubeOther.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); + //7.更新管线状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java index d248540..b33a1ee 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java @@ -91,7 +91,6 @@ } - public List getBusAlarmLedgerList(String devCode) { return this.dataGasMapper.getListByDevCode(devCode); } @@ -113,6 +112,13 @@ for (int i = 0; i < jsonArray.size(); i++) { try { String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) .findFirst(); @@ -175,18 +181,18 @@ alarmRecordsService.cancelDeviceAlarm(devCode); //4.存报警 //若没绑定井,则不产生报警 - boolean alarmFlag = false; + boolean alarmFlag = false; if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { //获取报警规则 List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { - alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); } break; } @@ -197,7 +203,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及设备状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新监测井状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java index e848fce..6297093 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java @@ -84,42 +84,78 @@ } - @Transactional - public void processAlarmData(JSONObject jsonObject, String devCode) { - JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + public void processEventAlarm(String devCode, String eventTypeCode, String logTime, String eventValue) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - //获取报警事件 - List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - - List busWellDTOList = dataGasMapper.getListByDevCode(devCode); - //若没绑定井,则不产生报警 - if (busWellDTOList != null && busWellDTOList.size() > 0) { - - for (int i = 0; i < jsonArray.size(); i++) { + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + //特殊处理消警 + if ("0".equals(eventValue)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, eventTypeCode); + } + return; } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> eventTypeCode.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 - if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + if (!alarmDeviceRuleResponseDTO.isPresent()) return; //1.查询是否已存在该类报警 - if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) return; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); - - + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + } + } + } + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + try { + String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmEventCode)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } } } } @@ -169,7 +205,76 @@ .rightVibrateAlarm(VibR) .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(uptime))) .logtime(new Date()) - .build());//存储采集数据 + .build()); + + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + ruleResponseDTOList.forEach(ruleResponseDTO -> { + + if ("Sloping".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Sloping)&&(!alarmRecordsService.isWatchAlarms(devCode,"Sloping"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Sloping", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Sloping)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Sloping"); + + } + } + if ("Destroy".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Destroy)&&(!alarmRecordsService.isWatchAlarms(devCode,"Destroy"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Destroy", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Destroy)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Destroy"); + + } + } + if ("Leak".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Leak)&&(!alarmRecordsService.isWatchAlarms(devCode,"Leak"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Leak", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Leak)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Leak"); + + } + } + if ("DiscL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscL)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscL"); + + } + } + if ("DiscR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscR)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscR"); + } + } + + if ("VibL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibL)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibL"); + } + } + if ("VibR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibR)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibR"); + } + } + }); + +// //处理报警事件 +// processEventAlarm(devCode,"Sloping",uptime,Sloping); +// processEventAlarm(devCode,"Destroy",uptime,Destroy); +// processEventAlarm(devCode,"Leak",uptime,Leak); +// processEventAlarm(devCode,"DiscL",uptime,DiscL); +// processEventAlarm(devCode,"DiscR",uptime,DiscR); +// processEventAlarm(devCode,"VibL",uptime,VibL); +// processEventAlarm(devCode,"VibR",uptime,VibR); + //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -197,7 +302,7 @@ if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && gas >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), gas)) { @@ -213,7 +318,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R,alarmFlag?"燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R, alarmFlag ? "燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java index f913775..895d201 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java @@ -89,6 +89,7 @@ String bfcf = busDeviceService.getBfcf(devCode); if (DictEnum.BF_ON.equals(bfcf)) { JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); //获取报警事件 List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); List busWellDTOList = dataGasMapper.getListByDevCode(devCode); @@ -96,25 +97,43 @@ if (busWellDTOList != null && busWellDTOList.size() > 0) { for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 if (!alarmDeviceRuleResponseDTO.isPresent()) continue; //1.查询是否已存在该类报警 if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { @@ -141,6 +160,9 @@ String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); gas = String.format("%.2f", Double.valueOf(gas)); //1.存数据 save(DataTubeOther.builder() @@ -156,6 +178,9 @@ .rsrp(rsrp) .sin(pci) .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) .build());//存储采集数据 //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -186,7 +211,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 98e736b..2288075 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -216,5 +216,15 @@ public ReturnDTO syncDeviceStatus() { return ReturnUtil.success(iBusDeviceService.syncDeviceStatus()); } + + @ApiOperation("根据闸井id获取设备信息") + @PostMapping("/getListByWellId") + @ResponseBody + public ReturnDTO getListByWellId(@RequestBody IdDTO idDTO) { + Assert.isFalse(ObjectUtil.isEmpty(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iBusDeviceService.getListByWellId(idDTO.getId())); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java index 72a2d84..d6d9743 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java @@ -85,6 +85,7 @@ return ReturnUtil.success(iBusLedgerService.detail(idDTO.getId())); } + /** * 同步三级部门 * diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java index 9e412d2..4316b56 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java @@ -1,22 +1,33 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.response.ErrorResponseData; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; +import com.casic.missiles.modular.device.dto.BusPositionImportDTO; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.ReturnUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataAccessException; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; /** @@ -40,8 +51,44 @@ @PostMapping("/addPosition") @ResponseBody public ReturnDTO addPosition(@RequestBody BusLedgerPipe busLedgerPipe) { + + List busLedgerPipeList = iBusLedgerPipeService.getListByNumber(busLedgerPipe.getTagNumber()); + if(busLedgerPipeList!=null&&busLedgerPipeList.size()>0){ + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE,"安装位号已存!!!"); + } + Long id =IdUtil.getSnowflake(1,2).nextId(); + busLedgerPipe.setId(id); iBusLedgerPipeService.save(busLedgerPipe); - return ReturnUtil.success(busLedgerPipe.getId()); + return ReturnUtil.success(id); + } + + @ApiOperation("批量导入") + @RequestMapping(value = "/batchImport", method = RequestMethod.POST) + @ResponseBody + public Object batchImport(@RequestParam("file") MultipartFile file) { + List results = new ArrayList<>(); + try { + results = this.importExcel(BusPositionImportDTO.class, file, null, null); + List list = iBusLedgerPipeService.addPositionBatch(results); + if (!CollectionUtil.isEmpty(list)) { + //获取校验报错信息 + return new ErrorResponseData(list.get(0)); + } + } catch (Exception e) { + return catchMybatisPlusException(e, "导入位置信息失败"); + } + return ResponseData.success(); + } + + private ResponseData catchMybatisPlusException(Exception e, String errorMsg) { + if (e instanceof DataAccessException) { + DataAccessException mybatisPlusException = (DataAccessException) e; + String message = mybatisPlusException.getRootCause().getMessage(); + if (message.contains("Duplicate entry '")) { + return new ErrorResponseData("安装位号重复:" + message.replaceAll("Duplicate entry '", "").replaceAll("' for key 'DEVCODE'", "")); + } + } + return new ErrorResponseData(errorMsg); } @ApiOperation("编辑点位") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java index d1e08a8..d938876 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java @@ -51,6 +51,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getOperatorName()), "CREATE_USER", request.getOperatorName()); queryWrapper.ge(ObjectUtil.isNotEmpty(request.getStartTime()), "START_TIME", request.getStartTime()); queryWrapper.le(ObjectUtil.isNotEmpty(request.getEndTime()), "END_TIME", request.getEndTime()); + queryWrapper.orderByDesc("START_TIME"); return ReturnUtil.success(super.packForBT(iSyncLogService.page(page, queryWrapper))); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java index 5ee5291..23ddee9 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java @@ -73,4 +73,12 @@ " where bd.DEVCODE= #{devcode} and bd.VALID=1 " + ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD asc") List getDeviceTypeRule(@Param("devcode") String devcode); + + + @Select("SELECT bd.* from bus_device bd " + + "left JOIN bus_device_ledger bl on bd.id= bl.DEVICE_ID and bl.VALID=1 " + + "LEFT JOIN bus_ledger_all_view bv on bv.id= bl.LEDGER_ID and bv.type= bl.TYPE and bv.VALID=1 " + + "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") + List getListByWellId(@Param("wellId") Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java index e1d16c4..a4c3f7a 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java @@ -37,7 +37,7 @@ @Select("SELECT b.ORG_ID,b.ORG_CODE,b.ORG_NAME,b.PARENT_ID FROM `bus_sync_org_relation` b WHERE b.DEL_FLAG =0 and b.PARENT_ID = #{syncId} ") List synDept(@Param("syncId") String syncId); - @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view ") + @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view where VALID=1") List getBusLedgers(); @Select("SELECT DEVCODE FROM `bus_device` where VALID>0 ") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml index 99ef10b..c6d1fff 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml @@ -29,6 +29,7 @@ bp.DEVICE_MODEL as deviceModel, bt.TYPE_NAME as typeName, + bp.DATA_SERVICE as deviceCategory, bm.`NAME` as manufactureName, bl.tagNumber as tagNumber, bl.id as ledgerId, @@ -81,6 +82,10 @@ and bd.LOGTIME #{request.logTime2} + + and bp.DATA_SERVICE =#{request.deviceCategory} + + ORDER BY bd.INSTALL_DATE DESC diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml index bdadb6a..d3f4684 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml @@ -40,7 +40,7 @@ `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + AND bdl.VALID = 1 JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -99,8 +99,8 @@ bm.`NAME` as manufactureName FROM `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE - LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID and bdl.type=blp.type + AND bdl.VALID = 1 LEFT JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -117,7 +117,9 @@ WITH station_temp as(SELECT bl.ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID FROM `bus_ledger` bl where bl.VALID=1 and bl.TYPE =2) - select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME from station_temp bl + select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME,bd.DEVCODE from station_temp bl left join bus_device_ledger bdl on bdl.LEDGER_ID = bl.ID and bdl.TYPE =2 and bdl.valid=1 left join bus_device bd on bd.id= bdl.DEVICE_ID and bd.VALID=1 order by bl.ID diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml index 7b92b04..1d97c64 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml @@ -184,7 +184,7 @@ WHERE EQ_LOCNO like 'N%' and - EQ_CATEGORY in (1,3) + EQ_CATEGORY in (1,2,3,5) diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java index 859cf08..143b42d 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java @@ -23,6 +23,9 @@ @ApiModelProperty("设备类型id") private Long typeId; + @ApiModelProperty("产品名称") + private String productName; + @ApiModelProperty("指令集合") private List commandConfigList; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java index 646610b..2cb5894 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("最新上传结束时间") private String logTime2; + + @ApiModelProperty("设备类别(0:自有设备,1:数据服务)") + private String deviceCategory; } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java index 8c95537..28b30fa 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java @@ -44,6 +44,9 @@ @ExcelProperty("关联管线") private String pipeCode; + @ExcelProperty("监测类型") + private String monitorType; + private String watchObject; private Long deviceType; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java index 0980c34..ac5daf0 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java @@ -24,4 +24,7 @@ @ApiModelProperty("详细位置") private String position; + @ApiModelProperty("1:其他,3:管线") + private String type; + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java new file mode 100644 index 0000000..bce7ebd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.device.dto; + + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class BusPositionImportDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + + @ExcelProperty("管线编号") + private String pipeCode; + + @ExcelProperty("安装位号") + private String tagNumber; + + @ExcelProperty("经度(高德)") + private String lngGaode; + + @ExcelProperty("纬度(高德)") + private String latGaode; + + @ExcelProperty("详细位置") + private String position; + + @ExcelProperty("管理单位") + private Long deptid; + + @ExcelProperty("位置类别") + private String type; + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java index 58faa0e..d72ae78 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java @@ -16,13 +16,13 @@ private String deviceId; //移动命令:left right up down left_up left_down right_up right_down GOTO_PRESET - @ApiModelProperty("移动命令") + @ApiModelProperty("移动命令(left right up down left_up left_down right_up right_down)") private String command; - @ApiModelProperty("速度") + @ApiModelProperty("速度,一般传100") private String speed; - @ApiModelProperty("启停命令") + @ApiModelProperty("启停命令(0:开始,1:结束)") private String cameraAction; @ApiModelProperty("预置点编号") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java index b4ec73c..5a3d0b0 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java @@ -66,7 +66,7 @@ private String powerSupplyMode; - @ApiModelProperty("是否结束数据服务") + @ApiModelProperty("是否结束数据服务(1:是,0:否)") @TableField("DATA_SERVICE") private String dataService; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java index 1184995..407e3c1 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java @@ -193,10 +193,14 @@ @TableField(exist = false) private String bfztName; + @ApiModelProperty("设备类别(0:自有设备,1:数据服务)") + @TableField(exist = false) + private String deviceCategory; + public BusDevice() { } - public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds) { + public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds, String monitorType) { this.devcode = devcode; this.deviceType = deviceType; this.productId = productId; @@ -204,6 +208,7 @@ this.installDate = installDate; this.watchObject = watchObject; this.ledgerIds = ledgerIds; + this.monitorType = monitorType; } public static List convertDeviceList(List dtoList) { @@ -227,7 +232,8 @@ deviceImportDTO.getValid(), deviceImportDTO.getInstallDate(), deviceImportDTO.getWatchObject(), - deviceImportDTO.getLedgerIds())); + deviceImportDTO.getLedgerIds(), + deviceImportDTO.getMonitorType())); }); return busDeviceList; } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java new file mode 100644 index 0000000..fc881a1 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.data.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 外协管盯 前端控制器 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RestController +@RequestMapping("/system/dataGasOther") +public class DataGasOtherController { + +} + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java new file mode 100644 index 0000000..b5f3627 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.data.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 外协管盯 Mapper 接口 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Mapper +public interface DataGasOtherMapper extends BaseMapper { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml new file mode 100644 index 0000000..8ce1455 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID, DEVCODE, WELL_CODE, WELL_NUMBER, GASVAL, VBAT, BATSTA, SIN, RSRP, SINR, UPTIME, LOGTIME, SIG, TEMP, SS_STATE + + + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java new file mode 100644 index 0000000..53972ba --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java @@ -0,0 +1,94 @@ +package com.casic.missiles.modular.data.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 外协管盯 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Builder +@Data +@TableName("data_gas_other") +@ApiModel(value = "DataGasOther对象", description = "外协管盯") +public class DataGasOther implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId("ID") + private Long id; + + @ApiModelProperty("设备编号") + @TableField("DEVCODE") + private String devcode; + + @ApiModelProperty("点位编号") + @TableField("WELL_CODE") + private String wellCode; + + @ApiModelProperty("位号") + @TableField("WELL_NUMBER") + private String wellNumber; + + @ApiModelProperty("气体浓度采样值") + @TableField("GASVAL") + private String gasval; + + @ApiModelProperty("设备电池电压值(毫伏)") + @TableField("VBAT") + private String vbat; + + @ApiModelProperty("电池状态0 正常、 1 低电告警、2 关机") + @TableField("BATSTA") + private String batsta; + + @ApiModelProperty("接收信号强度等级") + @TableField("SIN") + private String sin; + + @ApiModelProperty("接收信号参考质量 服务小 区的 RSRP 值") + @TableField("RSRP") + private String rsrp; + + @ApiModelProperty("信噪比") + @TableField("SINR") + private String sinr; + + @ApiModelProperty("采集时间") + @TableField("UPTIME") + private Date uptime; + + @ApiModelProperty("上传时间") + @TableField("LOGTIME") + private Date logtime; + + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态,0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java index 86077b8..f4d4417 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java @@ -76,4 +76,17 @@ private Date logtime; + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态:0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java new file mode 100644 index 0000000..842ca0b --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.data.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.data.entity.DataGasOther; + +/** + *

+ * 外协管盯 服务类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +public interface IDataGasOtherService extends IService { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java new file mode 100644 index 0000000..4c660e9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java @@ -0,0 +1,226 @@ +package com.casic.missiles.modular.data.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.enums.DeviceTypeEnum; +import com.casic.missiles.enums.DictEnum; +import com.casic.missiles.modular.alarm.dto.AlarmDeviceRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.AlarmRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.BusAlarmLedgerDTO; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.data.dao.DataGasMapper; +import com.casic.missiles.modular.data.dao.DataGasOtherMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import com.casic.missiles.modular.data.entity.DataTubeOther; +import com.casic.missiles.modular.data.service.IDataAbstractService; +import com.casic.missiles.modular.data.service.IDataGasOtherService; +import com.casic.missiles.modular.data.service.ITrackLogService; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Optional; + +/** + *

+ * 外协管盯 服务实现类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RequiredArgsConstructor +@Service +public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { + + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + private final DataGasMapper dataGasMapper; + private final IAlarmRecordsService alarmRecordsService; + private final IAlarmRuleService alarmRuleService; + private final ITrackLogService iTrackLogService; + private final IBusDeviceService busDeviceService; + + @Override + public void process(String dataContent) { + + //解析数据+根据业务处理存储数据 + JSONObject json = JSONObject.parseObject(dataContent); + String devCode = json.get("devCode").toString(); + JSONObject jsonObject = json.getJSONObject("mBody"); + if (mType[0].equals(json.get("mType")) || mType[3].equals(json.get("mType"))) {//存储上报数据 + this.processNormalData(jsonObject, devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + this.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.TubeOther.name().equals(json.get("devType"))) { + if ("TubeOtherConfigSuccess".equals(jsonObject.get("bType"))) { +// deviceConfigManager.updateStatus(devCode); + } + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } else if (mType[4].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); +// imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; + try { + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); + } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + } + } + + @Transactional + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.getString("cell"); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = jsonObject.getJSONArray("datas"); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + String bfcf = busDeviceService.getBfcf(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).getString("gasval"); + String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); + String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); + String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataGasOther.builder() + .wellCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .wellNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .devcode(devCode) +// .cell(cell) + .gasval(gas) + .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime))) + .logtime(new Date()) + .vbat(vbat) + .batsta(batsta) + .rsrp(rsrp) + .sin(pci) + .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) + .build());//存储采集数据 + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) continue; + + //3.清除设备告警 + alarmRecordsService.cancelDeviceAlarm(devCode); + //4.存报警 + //若没绑定井,则不产生报警 + boolean alarmFlag = false; + if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { + //获取报警规则 + List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); + for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { + if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && + Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { + alarmFlag = true; + //写入报警 + //1、判断报警是否已存在 + if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.TubeOther.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); + //7.更新管线状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java index d248540..b33a1ee 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java @@ -91,7 +91,6 @@ } - public List getBusAlarmLedgerList(String devCode) { return this.dataGasMapper.getListByDevCode(devCode); } @@ -113,6 +112,13 @@ for (int i = 0; i < jsonArray.size(); i++) { try { String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) .findFirst(); @@ -175,18 +181,18 @@ alarmRecordsService.cancelDeviceAlarm(devCode); //4.存报警 //若没绑定井,则不产生报警 - boolean alarmFlag = false; + boolean alarmFlag = false; if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { //获取报警规则 List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { - alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); } break; } @@ -197,7 +203,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及设备状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新监测井状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java index e848fce..6297093 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java @@ -84,42 +84,78 @@ } - @Transactional - public void processAlarmData(JSONObject jsonObject, String devCode) { - JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + public void processEventAlarm(String devCode, String eventTypeCode, String logTime, String eventValue) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - //获取报警事件 - List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - - List busWellDTOList = dataGasMapper.getListByDevCode(devCode); - //若没绑定井,则不产生报警 - if (busWellDTOList != null && busWellDTOList.size() > 0) { - - for (int i = 0; i < jsonArray.size(); i++) { + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + //特殊处理消警 + if ("0".equals(eventValue)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, eventTypeCode); + } + return; } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> eventTypeCode.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 - if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + if (!alarmDeviceRuleResponseDTO.isPresent()) return; //1.查询是否已存在该类报警 - if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) return; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); - - + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + } + } + } + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + try { + String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmEventCode)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } } } } @@ -169,7 +205,76 @@ .rightVibrateAlarm(VibR) .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(uptime))) .logtime(new Date()) - .build());//存储采集数据 + .build()); + + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + ruleResponseDTOList.forEach(ruleResponseDTO -> { + + if ("Sloping".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Sloping)&&(!alarmRecordsService.isWatchAlarms(devCode,"Sloping"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Sloping", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Sloping)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Sloping"); + + } + } + if ("Destroy".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Destroy)&&(!alarmRecordsService.isWatchAlarms(devCode,"Destroy"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Destroy", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Destroy)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Destroy"); + + } + } + if ("Leak".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Leak)&&(!alarmRecordsService.isWatchAlarms(devCode,"Leak"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Leak", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Leak)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Leak"); + + } + } + if ("DiscL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscL)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscL"); + + } + } + if ("DiscR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscR)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscR"); + } + } + + if ("VibL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibL)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibL"); + } + } + if ("VibR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibR)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibR"); + } + } + }); + +// //处理报警事件 +// processEventAlarm(devCode,"Sloping",uptime,Sloping); +// processEventAlarm(devCode,"Destroy",uptime,Destroy); +// processEventAlarm(devCode,"Leak",uptime,Leak); +// processEventAlarm(devCode,"DiscL",uptime,DiscL); +// processEventAlarm(devCode,"DiscR",uptime,DiscR); +// processEventAlarm(devCode,"VibL",uptime,VibL); +// processEventAlarm(devCode,"VibR",uptime,VibR); + //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -197,7 +302,7 @@ if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && gas >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), gas)) { @@ -213,7 +318,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R,alarmFlag?"燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R, alarmFlag ? "燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java index f913775..895d201 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java @@ -89,6 +89,7 @@ String bfcf = busDeviceService.getBfcf(devCode); if (DictEnum.BF_ON.equals(bfcf)) { JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); //获取报警事件 List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); List busWellDTOList = dataGasMapper.getListByDevCode(devCode); @@ -96,25 +97,43 @@ if (busWellDTOList != null && busWellDTOList.size() > 0) { for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 if (!alarmDeviceRuleResponseDTO.isPresent()) continue; //1.查询是否已存在该类报警 if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { @@ -141,6 +160,9 @@ String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); gas = String.format("%.2f", Double.valueOf(gas)); //1.存数据 save(DataTubeOther.builder() @@ -156,6 +178,9 @@ .rsrp(rsrp) .sin(pci) .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) .build());//存储采集数据 //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -186,7 +211,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 98e736b..2288075 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -216,5 +216,15 @@ public ReturnDTO syncDeviceStatus() { return ReturnUtil.success(iBusDeviceService.syncDeviceStatus()); } + + @ApiOperation("根据闸井id获取设备信息") + @PostMapping("/getListByWellId") + @ResponseBody + public ReturnDTO getListByWellId(@RequestBody IdDTO idDTO) { + Assert.isFalse(ObjectUtil.isEmpty(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iBusDeviceService.getListByWellId(idDTO.getId())); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java index 72a2d84..d6d9743 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java @@ -85,6 +85,7 @@ return ReturnUtil.success(iBusLedgerService.detail(idDTO.getId())); } + /** * 同步三级部门 * diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java index 9e412d2..4316b56 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java @@ -1,22 +1,33 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.response.ErrorResponseData; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; +import com.casic.missiles.modular.device.dto.BusPositionImportDTO; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.ReturnUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataAccessException; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; /** @@ -40,8 +51,44 @@ @PostMapping("/addPosition") @ResponseBody public ReturnDTO addPosition(@RequestBody BusLedgerPipe busLedgerPipe) { + + List busLedgerPipeList = iBusLedgerPipeService.getListByNumber(busLedgerPipe.getTagNumber()); + if(busLedgerPipeList!=null&&busLedgerPipeList.size()>0){ + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE,"安装位号已存!!!"); + } + Long id =IdUtil.getSnowflake(1,2).nextId(); + busLedgerPipe.setId(id); iBusLedgerPipeService.save(busLedgerPipe); - return ReturnUtil.success(busLedgerPipe.getId()); + return ReturnUtil.success(id); + } + + @ApiOperation("批量导入") + @RequestMapping(value = "/batchImport", method = RequestMethod.POST) + @ResponseBody + public Object batchImport(@RequestParam("file") MultipartFile file) { + List results = new ArrayList<>(); + try { + results = this.importExcel(BusPositionImportDTO.class, file, null, null); + List list = iBusLedgerPipeService.addPositionBatch(results); + if (!CollectionUtil.isEmpty(list)) { + //获取校验报错信息 + return new ErrorResponseData(list.get(0)); + } + } catch (Exception e) { + return catchMybatisPlusException(e, "导入位置信息失败"); + } + return ResponseData.success(); + } + + private ResponseData catchMybatisPlusException(Exception e, String errorMsg) { + if (e instanceof DataAccessException) { + DataAccessException mybatisPlusException = (DataAccessException) e; + String message = mybatisPlusException.getRootCause().getMessage(); + if (message.contains("Duplicate entry '")) { + return new ErrorResponseData("安装位号重复:" + message.replaceAll("Duplicate entry '", "").replaceAll("' for key 'DEVCODE'", "")); + } + } + return new ErrorResponseData(errorMsg); } @ApiOperation("编辑点位") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java index d1e08a8..d938876 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java @@ -51,6 +51,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getOperatorName()), "CREATE_USER", request.getOperatorName()); queryWrapper.ge(ObjectUtil.isNotEmpty(request.getStartTime()), "START_TIME", request.getStartTime()); queryWrapper.le(ObjectUtil.isNotEmpty(request.getEndTime()), "END_TIME", request.getEndTime()); + queryWrapper.orderByDesc("START_TIME"); return ReturnUtil.success(super.packForBT(iSyncLogService.page(page, queryWrapper))); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java index 5ee5291..23ddee9 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java @@ -73,4 +73,12 @@ " where bd.DEVCODE= #{devcode} and bd.VALID=1 " + ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD asc") List getDeviceTypeRule(@Param("devcode") String devcode); + + + @Select("SELECT bd.* from bus_device bd " + + "left JOIN bus_device_ledger bl on bd.id= bl.DEVICE_ID and bl.VALID=1 " + + "LEFT JOIN bus_ledger_all_view bv on bv.id= bl.LEDGER_ID and bv.type= bl.TYPE and bv.VALID=1 " + + "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") + List getListByWellId(@Param("wellId") Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java index e1d16c4..a4c3f7a 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java @@ -37,7 +37,7 @@ @Select("SELECT b.ORG_ID,b.ORG_CODE,b.ORG_NAME,b.PARENT_ID FROM `bus_sync_org_relation` b WHERE b.DEL_FLAG =0 and b.PARENT_ID = #{syncId} ") List synDept(@Param("syncId") String syncId); - @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view ") + @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view where VALID=1") List getBusLedgers(); @Select("SELECT DEVCODE FROM `bus_device` where VALID>0 ") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml index 99ef10b..c6d1fff 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml @@ -29,6 +29,7 @@ bp.DEVICE_MODEL as deviceModel, bt.TYPE_NAME as typeName, + bp.DATA_SERVICE as deviceCategory, bm.`NAME` as manufactureName, bl.tagNumber as tagNumber, bl.id as ledgerId, @@ -81,6 +82,10 @@ and bd.LOGTIME #{request.logTime2} + + and bp.DATA_SERVICE =#{request.deviceCategory} + + ORDER BY bd.INSTALL_DATE DESC diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml index bdadb6a..d3f4684 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml @@ -40,7 +40,7 @@ `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + AND bdl.VALID = 1 JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -99,8 +99,8 @@ bm.`NAME` as manufactureName FROM `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE - LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID and bdl.type=blp.type + AND bdl.VALID = 1 LEFT JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -117,7 +117,9 @@ WITH station_temp as(SELECT bl.ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID FROM `bus_ledger` bl where bl.VALID=1 and bl.TYPE =2) - select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME from station_temp bl + select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME,bd.DEVCODE from station_temp bl left join bus_device_ledger bdl on bdl.LEDGER_ID = bl.ID and bdl.TYPE =2 and bdl.valid=1 left join bus_device bd on bd.id= bdl.DEVICE_ID and bd.VALID=1 order by bl.ID diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml index 7b92b04..1d97c64 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml @@ -184,7 +184,7 @@ WHERE EQ_LOCNO like 'N%' and - EQ_CATEGORY in (1,3) + EQ_CATEGORY in (1,2,3,5) diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java index 859cf08..143b42d 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java @@ -23,6 +23,9 @@ @ApiModelProperty("设备类型id") private Long typeId; + @ApiModelProperty("产品名称") + private String productName; + @ApiModelProperty("指令集合") private List commandConfigList; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java index 646610b..2cb5894 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("最新上传结束时间") private String logTime2; + + @ApiModelProperty("设备类别(0:自有设备,1:数据服务)") + private String deviceCategory; } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java index 8c95537..28b30fa 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java @@ -44,6 +44,9 @@ @ExcelProperty("关联管线") private String pipeCode; + @ExcelProperty("监测类型") + private String monitorType; + private String watchObject; private Long deviceType; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java index 0980c34..ac5daf0 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java @@ -24,4 +24,7 @@ @ApiModelProperty("详细位置") private String position; + @ApiModelProperty("1:其他,3:管线") + private String type; + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java new file mode 100644 index 0000000..bce7ebd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.device.dto; + + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class BusPositionImportDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + + @ExcelProperty("管线编号") + private String pipeCode; + + @ExcelProperty("安装位号") + private String tagNumber; + + @ExcelProperty("经度(高德)") + private String lngGaode; + + @ExcelProperty("纬度(高德)") + private String latGaode; + + @ExcelProperty("详细位置") + private String position; + + @ExcelProperty("管理单位") + private Long deptid; + + @ExcelProperty("位置类别") + private String type; + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java index 58faa0e..d72ae78 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java @@ -16,13 +16,13 @@ private String deviceId; //移动命令:left right up down left_up left_down right_up right_down GOTO_PRESET - @ApiModelProperty("移动命令") + @ApiModelProperty("移动命令(left right up down left_up left_down right_up right_down)") private String command; - @ApiModelProperty("速度") + @ApiModelProperty("速度,一般传100") private String speed; - @ApiModelProperty("启停命令") + @ApiModelProperty("启停命令(0:开始,1:结束)") private String cameraAction; @ApiModelProperty("预置点编号") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java index b4ec73c..5a3d0b0 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java @@ -66,7 +66,7 @@ private String powerSupplyMode; - @ApiModelProperty("是否结束数据服务") + @ApiModelProperty("是否结束数据服务(1:是,0:否)") @TableField("DATA_SERVICE") private String dataService; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java index 1184995..407e3c1 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java @@ -193,10 +193,14 @@ @TableField(exist = false) private String bfztName; + @ApiModelProperty("设备类别(0:自有设备,1:数据服务)") + @TableField(exist = false) + private String deviceCategory; + public BusDevice() { } - public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds) { + public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds, String monitorType) { this.devcode = devcode; this.deviceType = deviceType; this.productId = productId; @@ -204,6 +208,7 @@ this.installDate = installDate; this.watchObject = watchObject; this.ledgerIds = ledgerIds; + this.monitorType = monitorType; } public static List convertDeviceList(List dtoList) { @@ -227,7 +232,8 @@ deviceImportDTO.getValid(), deviceImportDTO.getInstallDate(), deviceImportDTO.getWatchObject(), - deviceImportDTO.getLedgerIds())); + deviceImportDTO.getLedgerIds(), + deviceImportDTO.getMonitorType())); }); return busDeviceList; } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java index 12b52de..1ac8455 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java @@ -1,16 +1,20 @@ package com.casic.missiles.modular.device.entity; +import cn.hutool.core.util.IdUtil; 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 com.casic.missiles.modular.device.dto.BusPositionImportDTO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import java.io.Serializable; +import java.util.ArrayList; import java.util.Date; +import java.util.List; /** *

@@ -29,7 +33,7 @@ private static final long serialVersionUID = 1L; @ApiModelProperty("主键") - @TableId(value = "ID", type = IdType.AUTO) +// @TableId(value = "ID", type = IdType.AUTO) private Long id; @ApiModelProperty("编号") @@ -60,6 +64,10 @@ @TableField("DEPTID") private Long deptid; + @ApiModelProperty("类别(1:其他,3:管线)") + @TableField("`TYPE`") + private String type; + @ApiModelProperty("责任部门") @TableField("RESPONSIBLE_DEPT") private Long responsibleDept; @@ -110,9 +118,10 @@ public BusLedgerPipe() { } - public BusLedgerPipe(String pipeCode, String ledgerName, String tagNumber, + public BusLedgerPipe(Long id,String pipeCode, String ledgerName, String tagNumber, String lngGaode, String latGaode, String position, - Long deptid, String devcode) { + Long deptid, String devcode, String type) { + this.id=id; this.pipeCode = pipeCode; this.ledgerName = ledgerName; this.tagNumber = tagNumber; @@ -121,5 +130,26 @@ this.position = position; this.deptid = deptid; this.devcode = devcode; + this.type = type; } + + public static List convertDeviceList(List dtoList) { + + + List busDeviceList = new ArrayList<>(); + dtoList.forEach(positionImportDTO -> { + + busDeviceList.add(new BusLedgerPipe(IdUtil.getSnowflake(1,2).nextId(),positionImportDTO.getPipeCode(), + positionImportDTO.getTagNumber(), + positionImportDTO.getTagNumber(), + positionImportDTO.getLngGaode(), + positionImportDTO.getLatGaode(), + positionImportDTO.getPosition(), + positionImportDTO.getDeptid(), + "", + positionImportDTO.getType())); + }); + return busDeviceList; + } + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java new file mode 100644 index 0000000..fc881a1 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.data.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 外协管盯 前端控制器 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RestController +@RequestMapping("/system/dataGasOther") +public class DataGasOtherController { + +} + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java new file mode 100644 index 0000000..b5f3627 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.data.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 外协管盯 Mapper 接口 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Mapper +public interface DataGasOtherMapper extends BaseMapper { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml new file mode 100644 index 0000000..8ce1455 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID, DEVCODE, WELL_CODE, WELL_NUMBER, GASVAL, VBAT, BATSTA, SIN, RSRP, SINR, UPTIME, LOGTIME, SIG, TEMP, SS_STATE + + + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java new file mode 100644 index 0000000..53972ba --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java @@ -0,0 +1,94 @@ +package com.casic.missiles.modular.data.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 外协管盯 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Builder +@Data +@TableName("data_gas_other") +@ApiModel(value = "DataGasOther对象", description = "外协管盯") +public class DataGasOther implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId("ID") + private Long id; + + @ApiModelProperty("设备编号") + @TableField("DEVCODE") + private String devcode; + + @ApiModelProperty("点位编号") + @TableField("WELL_CODE") + private String wellCode; + + @ApiModelProperty("位号") + @TableField("WELL_NUMBER") + private String wellNumber; + + @ApiModelProperty("气体浓度采样值") + @TableField("GASVAL") + private String gasval; + + @ApiModelProperty("设备电池电压值(毫伏)") + @TableField("VBAT") + private String vbat; + + @ApiModelProperty("电池状态0 正常、 1 低电告警、2 关机") + @TableField("BATSTA") + private String batsta; + + @ApiModelProperty("接收信号强度等级") + @TableField("SIN") + private String sin; + + @ApiModelProperty("接收信号参考质量 服务小 区的 RSRP 值") + @TableField("RSRP") + private String rsrp; + + @ApiModelProperty("信噪比") + @TableField("SINR") + private String sinr; + + @ApiModelProperty("采集时间") + @TableField("UPTIME") + private Date uptime; + + @ApiModelProperty("上传时间") + @TableField("LOGTIME") + private Date logtime; + + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态,0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java index 86077b8..f4d4417 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java @@ -76,4 +76,17 @@ private Date logtime; + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态:0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java new file mode 100644 index 0000000..842ca0b --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.data.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.data.entity.DataGasOther; + +/** + *

+ * 外协管盯 服务类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +public interface IDataGasOtherService extends IService { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java new file mode 100644 index 0000000..4c660e9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java @@ -0,0 +1,226 @@ +package com.casic.missiles.modular.data.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.enums.DeviceTypeEnum; +import com.casic.missiles.enums.DictEnum; +import com.casic.missiles.modular.alarm.dto.AlarmDeviceRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.AlarmRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.BusAlarmLedgerDTO; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.data.dao.DataGasMapper; +import com.casic.missiles.modular.data.dao.DataGasOtherMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import com.casic.missiles.modular.data.entity.DataTubeOther; +import com.casic.missiles.modular.data.service.IDataAbstractService; +import com.casic.missiles.modular.data.service.IDataGasOtherService; +import com.casic.missiles.modular.data.service.ITrackLogService; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Optional; + +/** + *

+ * 外协管盯 服务实现类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RequiredArgsConstructor +@Service +public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { + + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + private final DataGasMapper dataGasMapper; + private final IAlarmRecordsService alarmRecordsService; + private final IAlarmRuleService alarmRuleService; + private final ITrackLogService iTrackLogService; + private final IBusDeviceService busDeviceService; + + @Override + public void process(String dataContent) { + + //解析数据+根据业务处理存储数据 + JSONObject json = JSONObject.parseObject(dataContent); + String devCode = json.get("devCode").toString(); + JSONObject jsonObject = json.getJSONObject("mBody"); + if (mType[0].equals(json.get("mType")) || mType[3].equals(json.get("mType"))) {//存储上报数据 + this.processNormalData(jsonObject, devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + this.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.TubeOther.name().equals(json.get("devType"))) { + if ("TubeOtherConfigSuccess".equals(jsonObject.get("bType"))) { +// deviceConfigManager.updateStatus(devCode); + } + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } else if (mType[4].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); +// imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; + try { + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); + } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + } + } + + @Transactional + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.getString("cell"); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = jsonObject.getJSONArray("datas"); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + String bfcf = busDeviceService.getBfcf(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).getString("gasval"); + String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); + String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); + String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataGasOther.builder() + .wellCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .wellNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .devcode(devCode) +// .cell(cell) + .gasval(gas) + .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime))) + .logtime(new Date()) + .vbat(vbat) + .batsta(batsta) + .rsrp(rsrp) + .sin(pci) + .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) + .build());//存储采集数据 + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) continue; + + //3.清除设备告警 + alarmRecordsService.cancelDeviceAlarm(devCode); + //4.存报警 + //若没绑定井,则不产生报警 + boolean alarmFlag = false; + if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { + //获取报警规则 + List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); + for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { + if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && + Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { + alarmFlag = true; + //写入报警 + //1、判断报警是否已存在 + if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.TubeOther.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); + //7.更新管线状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java index d248540..b33a1ee 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java @@ -91,7 +91,6 @@ } - public List getBusAlarmLedgerList(String devCode) { return this.dataGasMapper.getListByDevCode(devCode); } @@ -113,6 +112,13 @@ for (int i = 0; i < jsonArray.size(); i++) { try { String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) .findFirst(); @@ -175,18 +181,18 @@ alarmRecordsService.cancelDeviceAlarm(devCode); //4.存报警 //若没绑定井,则不产生报警 - boolean alarmFlag = false; + boolean alarmFlag = false; if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { //获取报警规则 List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { - alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); } break; } @@ -197,7 +203,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及设备状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新监测井状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java index e848fce..6297093 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java @@ -84,42 +84,78 @@ } - @Transactional - public void processAlarmData(JSONObject jsonObject, String devCode) { - JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + public void processEventAlarm(String devCode, String eventTypeCode, String logTime, String eventValue) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - //获取报警事件 - List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - - List busWellDTOList = dataGasMapper.getListByDevCode(devCode); - //若没绑定井,则不产生报警 - if (busWellDTOList != null && busWellDTOList.size() > 0) { - - for (int i = 0; i < jsonArray.size(); i++) { + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + //特殊处理消警 + if ("0".equals(eventValue)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, eventTypeCode); + } + return; } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> eventTypeCode.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 - if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + if (!alarmDeviceRuleResponseDTO.isPresent()) return; //1.查询是否已存在该类报警 - if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) return; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); - - + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + } + } + } + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + try { + String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmEventCode)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } } } } @@ -169,7 +205,76 @@ .rightVibrateAlarm(VibR) .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(uptime))) .logtime(new Date()) - .build());//存储采集数据 + .build()); + + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + ruleResponseDTOList.forEach(ruleResponseDTO -> { + + if ("Sloping".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Sloping)&&(!alarmRecordsService.isWatchAlarms(devCode,"Sloping"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Sloping", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Sloping)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Sloping"); + + } + } + if ("Destroy".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Destroy)&&(!alarmRecordsService.isWatchAlarms(devCode,"Destroy"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Destroy", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Destroy)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Destroy"); + + } + } + if ("Leak".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Leak)&&(!alarmRecordsService.isWatchAlarms(devCode,"Leak"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Leak", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Leak)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Leak"); + + } + } + if ("DiscL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscL)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscL"); + + } + } + if ("DiscR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscR)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscR"); + } + } + + if ("VibL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibL)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibL"); + } + } + if ("VibR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibR)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibR"); + } + } + }); + +// //处理报警事件 +// processEventAlarm(devCode,"Sloping",uptime,Sloping); +// processEventAlarm(devCode,"Destroy",uptime,Destroy); +// processEventAlarm(devCode,"Leak",uptime,Leak); +// processEventAlarm(devCode,"DiscL",uptime,DiscL); +// processEventAlarm(devCode,"DiscR",uptime,DiscR); +// processEventAlarm(devCode,"VibL",uptime,VibL); +// processEventAlarm(devCode,"VibR",uptime,VibR); + //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -197,7 +302,7 @@ if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && gas >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), gas)) { @@ -213,7 +318,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R,alarmFlag?"燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R, alarmFlag ? "燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java index f913775..895d201 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java @@ -89,6 +89,7 @@ String bfcf = busDeviceService.getBfcf(devCode); if (DictEnum.BF_ON.equals(bfcf)) { JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); //获取报警事件 List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); List busWellDTOList = dataGasMapper.getListByDevCode(devCode); @@ -96,25 +97,43 @@ if (busWellDTOList != null && busWellDTOList.size() > 0) { for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 if (!alarmDeviceRuleResponseDTO.isPresent()) continue; //1.查询是否已存在该类报警 if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { @@ -141,6 +160,9 @@ String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); gas = String.format("%.2f", Double.valueOf(gas)); //1.存数据 save(DataTubeOther.builder() @@ -156,6 +178,9 @@ .rsrp(rsrp) .sin(pci) .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) .build());//存储采集数据 //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -186,7 +211,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 98e736b..2288075 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -216,5 +216,15 @@ public ReturnDTO syncDeviceStatus() { return ReturnUtil.success(iBusDeviceService.syncDeviceStatus()); } + + @ApiOperation("根据闸井id获取设备信息") + @PostMapping("/getListByWellId") + @ResponseBody + public ReturnDTO getListByWellId(@RequestBody IdDTO idDTO) { + Assert.isFalse(ObjectUtil.isEmpty(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iBusDeviceService.getListByWellId(idDTO.getId())); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java index 72a2d84..d6d9743 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java @@ -85,6 +85,7 @@ return ReturnUtil.success(iBusLedgerService.detail(idDTO.getId())); } + /** * 同步三级部门 * diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java index 9e412d2..4316b56 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java @@ -1,22 +1,33 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.response.ErrorResponseData; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; +import com.casic.missiles.modular.device.dto.BusPositionImportDTO; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.ReturnUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataAccessException; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; /** @@ -40,8 +51,44 @@ @PostMapping("/addPosition") @ResponseBody public ReturnDTO addPosition(@RequestBody BusLedgerPipe busLedgerPipe) { + + List busLedgerPipeList = iBusLedgerPipeService.getListByNumber(busLedgerPipe.getTagNumber()); + if(busLedgerPipeList!=null&&busLedgerPipeList.size()>0){ + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE,"安装位号已存!!!"); + } + Long id =IdUtil.getSnowflake(1,2).nextId(); + busLedgerPipe.setId(id); iBusLedgerPipeService.save(busLedgerPipe); - return ReturnUtil.success(busLedgerPipe.getId()); + return ReturnUtil.success(id); + } + + @ApiOperation("批量导入") + @RequestMapping(value = "/batchImport", method = RequestMethod.POST) + @ResponseBody + public Object batchImport(@RequestParam("file") MultipartFile file) { + List results = new ArrayList<>(); + try { + results = this.importExcel(BusPositionImportDTO.class, file, null, null); + List list = iBusLedgerPipeService.addPositionBatch(results); + if (!CollectionUtil.isEmpty(list)) { + //获取校验报错信息 + return new ErrorResponseData(list.get(0)); + } + } catch (Exception e) { + return catchMybatisPlusException(e, "导入位置信息失败"); + } + return ResponseData.success(); + } + + private ResponseData catchMybatisPlusException(Exception e, String errorMsg) { + if (e instanceof DataAccessException) { + DataAccessException mybatisPlusException = (DataAccessException) e; + String message = mybatisPlusException.getRootCause().getMessage(); + if (message.contains("Duplicate entry '")) { + return new ErrorResponseData("安装位号重复:" + message.replaceAll("Duplicate entry '", "").replaceAll("' for key 'DEVCODE'", "")); + } + } + return new ErrorResponseData(errorMsg); } @ApiOperation("编辑点位") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java index d1e08a8..d938876 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java @@ -51,6 +51,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getOperatorName()), "CREATE_USER", request.getOperatorName()); queryWrapper.ge(ObjectUtil.isNotEmpty(request.getStartTime()), "START_TIME", request.getStartTime()); queryWrapper.le(ObjectUtil.isNotEmpty(request.getEndTime()), "END_TIME", request.getEndTime()); + queryWrapper.orderByDesc("START_TIME"); return ReturnUtil.success(super.packForBT(iSyncLogService.page(page, queryWrapper))); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java index 5ee5291..23ddee9 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java @@ -73,4 +73,12 @@ " where bd.DEVCODE= #{devcode} and bd.VALID=1 " + ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD asc") List getDeviceTypeRule(@Param("devcode") String devcode); + + + @Select("SELECT bd.* from bus_device bd " + + "left JOIN bus_device_ledger bl on bd.id= bl.DEVICE_ID and bl.VALID=1 " + + "LEFT JOIN bus_ledger_all_view bv on bv.id= bl.LEDGER_ID and bv.type= bl.TYPE and bv.VALID=1 " + + "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") + List getListByWellId(@Param("wellId") Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java index e1d16c4..a4c3f7a 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java @@ -37,7 +37,7 @@ @Select("SELECT b.ORG_ID,b.ORG_CODE,b.ORG_NAME,b.PARENT_ID FROM `bus_sync_org_relation` b WHERE b.DEL_FLAG =0 and b.PARENT_ID = #{syncId} ") List synDept(@Param("syncId") String syncId); - @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view ") + @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view where VALID=1") List getBusLedgers(); @Select("SELECT DEVCODE FROM `bus_device` where VALID>0 ") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml index 99ef10b..c6d1fff 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml @@ -29,6 +29,7 @@ bp.DEVICE_MODEL as deviceModel, bt.TYPE_NAME as typeName, + bp.DATA_SERVICE as deviceCategory, bm.`NAME` as manufactureName, bl.tagNumber as tagNumber, bl.id as ledgerId, @@ -81,6 +82,10 @@ and bd.LOGTIME #{request.logTime2} + + and bp.DATA_SERVICE =#{request.deviceCategory} + + ORDER BY bd.INSTALL_DATE DESC diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml index bdadb6a..d3f4684 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml @@ -40,7 +40,7 @@ `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + AND bdl.VALID = 1 JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -99,8 +99,8 @@ bm.`NAME` as manufactureName FROM `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE - LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID and bdl.type=blp.type + AND bdl.VALID = 1 LEFT JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -117,7 +117,9 @@ WITH station_temp as(SELECT bl.ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID FROM `bus_ledger` bl where bl.VALID=1 and bl.TYPE =2) - select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME from station_temp bl + select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME,bd.DEVCODE from station_temp bl left join bus_device_ledger bdl on bdl.LEDGER_ID = bl.ID and bdl.TYPE =2 and bdl.valid=1 left join bus_device bd on bd.id= bdl.DEVICE_ID and bd.VALID=1 order by bl.ID diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml index 7b92b04..1d97c64 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml @@ -184,7 +184,7 @@ WHERE EQ_LOCNO like 'N%' and - EQ_CATEGORY in (1,3) + EQ_CATEGORY in (1,2,3,5) diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java index 859cf08..143b42d 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java @@ -23,6 +23,9 @@ @ApiModelProperty("设备类型id") private Long typeId; + @ApiModelProperty("产品名称") + private String productName; + @ApiModelProperty("指令集合") private List commandConfigList; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java index 646610b..2cb5894 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("最新上传结束时间") private String logTime2; + + @ApiModelProperty("设备类别(0:自有设备,1:数据服务)") + private String deviceCategory; } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java index 8c95537..28b30fa 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java @@ -44,6 +44,9 @@ @ExcelProperty("关联管线") private String pipeCode; + @ExcelProperty("监测类型") + private String monitorType; + private String watchObject; private Long deviceType; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java index 0980c34..ac5daf0 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java @@ -24,4 +24,7 @@ @ApiModelProperty("详细位置") private String position; + @ApiModelProperty("1:其他,3:管线") + private String type; + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java new file mode 100644 index 0000000..bce7ebd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.device.dto; + + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class BusPositionImportDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + + @ExcelProperty("管线编号") + private String pipeCode; + + @ExcelProperty("安装位号") + private String tagNumber; + + @ExcelProperty("经度(高德)") + private String lngGaode; + + @ExcelProperty("纬度(高德)") + private String latGaode; + + @ExcelProperty("详细位置") + private String position; + + @ExcelProperty("管理单位") + private Long deptid; + + @ExcelProperty("位置类别") + private String type; + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java index 58faa0e..d72ae78 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java @@ -16,13 +16,13 @@ private String deviceId; //移动命令:left right up down left_up left_down right_up right_down GOTO_PRESET - @ApiModelProperty("移动命令") + @ApiModelProperty("移动命令(left right up down left_up left_down right_up right_down)") private String command; - @ApiModelProperty("速度") + @ApiModelProperty("速度,一般传100") private String speed; - @ApiModelProperty("启停命令") + @ApiModelProperty("启停命令(0:开始,1:结束)") private String cameraAction; @ApiModelProperty("预置点编号") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java index b4ec73c..5a3d0b0 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java @@ -66,7 +66,7 @@ private String powerSupplyMode; - @ApiModelProperty("是否结束数据服务") + @ApiModelProperty("是否结束数据服务(1:是,0:否)") @TableField("DATA_SERVICE") private String dataService; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java index 1184995..407e3c1 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java @@ -193,10 +193,14 @@ @TableField(exist = false) private String bfztName; + @ApiModelProperty("设备类别(0:自有设备,1:数据服务)") + @TableField(exist = false) + private String deviceCategory; + public BusDevice() { } - public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds) { + public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds, String monitorType) { this.devcode = devcode; this.deviceType = deviceType; this.productId = productId; @@ -204,6 +208,7 @@ this.installDate = installDate; this.watchObject = watchObject; this.ledgerIds = ledgerIds; + this.monitorType = monitorType; } public static List convertDeviceList(List dtoList) { @@ -227,7 +232,8 @@ deviceImportDTO.getValid(), deviceImportDTO.getInstallDate(), deviceImportDTO.getWatchObject(), - deviceImportDTO.getLedgerIds())); + deviceImportDTO.getLedgerIds(), + deviceImportDTO.getMonitorType())); }); return busDeviceList; } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java index 12b52de..1ac8455 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java @@ -1,16 +1,20 @@ package com.casic.missiles.modular.device.entity; +import cn.hutool.core.util.IdUtil; 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 com.casic.missiles.modular.device.dto.BusPositionImportDTO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import java.io.Serializable; +import java.util.ArrayList; import java.util.Date; +import java.util.List; /** *

@@ -29,7 +33,7 @@ private static final long serialVersionUID = 1L; @ApiModelProperty("主键") - @TableId(value = "ID", type = IdType.AUTO) +// @TableId(value = "ID", type = IdType.AUTO) private Long id; @ApiModelProperty("编号") @@ -60,6 +64,10 @@ @TableField("DEPTID") private Long deptid; + @ApiModelProperty("类别(1:其他,3:管线)") + @TableField("`TYPE`") + private String type; + @ApiModelProperty("责任部门") @TableField("RESPONSIBLE_DEPT") private Long responsibleDept; @@ -110,9 +118,10 @@ public BusLedgerPipe() { } - public BusLedgerPipe(String pipeCode, String ledgerName, String tagNumber, + public BusLedgerPipe(Long id,String pipeCode, String ledgerName, String tagNumber, String lngGaode, String latGaode, String position, - Long deptid, String devcode) { + Long deptid, String devcode, String type) { + this.id=id; this.pipeCode = pipeCode; this.ledgerName = ledgerName; this.tagNumber = tagNumber; @@ -121,5 +130,26 @@ this.position = position; this.deptid = deptid; this.devcode = devcode; + this.type = type; } + + public static List convertDeviceList(List dtoList) { + + + List busDeviceList = new ArrayList<>(); + dtoList.forEach(positionImportDTO -> { + + busDeviceList.add(new BusLedgerPipe(IdUtil.getSnowflake(1,2).nextId(),positionImportDTO.getPipeCode(), + positionImportDTO.getTagNumber(), + positionImportDTO.getTagNumber(), + positionImportDTO.getLngGaode(), + positionImportDTO.getLatGaode(), + positionImportDTO.getPosition(), + positionImportDTO.getDeptid(), + "", + positionImportDTO.getType())); + }); + return busDeviceList; + } + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java index aaaa409..63c0576 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java @@ -52,4 +52,8 @@ List getDeviceRule(String devcode); + List getDevicesByCodes(List devcodes); + + List getListByWellId(Long wellId); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java new file mode 100644 index 0000000..fc881a1 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.data.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 外协管盯 前端控制器 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RestController +@RequestMapping("/system/dataGasOther") +public class DataGasOtherController { + +} + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java new file mode 100644 index 0000000..b5f3627 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.data.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 外协管盯 Mapper 接口 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Mapper +public interface DataGasOtherMapper extends BaseMapper { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml new file mode 100644 index 0000000..8ce1455 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID, DEVCODE, WELL_CODE, WELL_NUMBER, GASVAL, VBAT, BATSTA, SIN, RSRP, SINR, UPTIME, LOGTIME, SIG, TEMP, SS_STATE + + + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java new file mode 100644 index 0000000..53972ba --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java @@ -0,0 +1,94 @@ +package com.casic.missiles.modular.data.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 外协管盯 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Builder +@Data +@TableName("data_gas_other") +@ApiModel(value = "DataGasOther对象", description = "外协管盯") +public class DataGasOther implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId("ID") + private Long id; + + @ApiModelProperty("设备编号") + @TableField("DEVCODE") + private String devcode; + + @ApiModelProperty("点位编号") + @TableField("WELL_CODE") + private String wellCode; + + @ApiModelProperty("位号") + @TableField("WELL_NUMBER") + private String wellNumber; + + @ApiModelProperty("气体浓度采样值") + @TableField("GASVAL") + private String gasval; + + @ApiModelProperty("设备电池电压值(毫伏)") + @TableField("VBAT") + private String vbat; + + @ApiModelProperty("电池状态0 正常、 1 低电告警、2 关机") + @TableField("BATSTA") + private String batsta; + + @ApiModelProperty("接收信号强度等级") + @TableField("SIN") + private String sin; + + @ApiModelProperty("接收信号参考质量 服务小 区的 RSRP 值") + @TableField("RSRP") + private String rsrp; + + @ApiModelProperty("信噪比") + @TableField("SINR") + private String sinr; + + @ApiModelProperty("采集时间") + @TableField("UPTIME") + private Date uptime; + + @ApiModelProperty("上传时间") + @TableField("LOGTIME") + private Date logtime; + + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态,0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java index 86077b8..f4d4417 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java @@ -76,4 +76,17 @@ private Date logtime; + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态:0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java new file mode 100644 index 0000000..842ca0b --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.data.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.data.entity.DataGasOther; + +/** + *

+ * 外协管盯 服务类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +public interface IDataGasOtherService extends IService { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java new file mode 100644 index 0000000..4c660e9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java @@ -0,0 +1,226 @@ +package com.casic.missiles.modular.data.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.enums.DeviceTypeEnum; +import com.casic.missiles.enums.DictEnum; +import com.casic.missiles.modular.alarm.dto.AlarmDeviceRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.AlarmRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.BusAlarmLedgerDTO; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.data.dao.DataGasMapper; +import com.casic.missiles.modular.data.dao.DataGasOtherMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import com.casic.missiles.modular.data.entity.DataTubeOther; +import com.casic.missiles.modular.data.service.IDataAbstractService; +import com.casic.missiles.modular.data.service.IDataGasOtherService; +import com.casic.missiles.modular.data.service.ITrackLogService; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Optional; + +/** + *

+ * 外协管盯 服务实现类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RequiredArgsConstructor +@Service +public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { + + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + private final DataGasMapper dataGasMapper; + private final IAlarmRecordsService alarmRecordsService; + private final IAlarmRuleService alarmRuleService; + private final ITrackLogService iTrackLogService; + private final IBusDeviceService busDeviceService; + + @Override + public void process(String dataContent) { + + //解析数据+根据业务处理存储数据 + JSONObject json = JSONObject.parseObject(dataContent); + String devCode = json.get("devCode").toString(); + JSONObject jsonObject = json.getJSONObject("mBody"); + if (mType[0].equals(json.get("mType")) || mType[3].equals(json.get("mType"))) {//存储上报数据 + this.processNormalData(jsonObject, devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + this.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.TubeOther.name().equals(json.get("devType"))) { + if ("TubeOtherConfigSuccess".equals(jsonObject.get("bType"))) { +// deviceConfigManager.updateStatus(devCode); + } + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } else if (mType[4].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); +// imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; + try { + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); + } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + } + } + + @Transactional + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.getString("cell"); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = jsonObject.getJSONArray("datas"); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + String bfcf = busDeviceService.getBfcf(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).getString("gasval"); + String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); + String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); + String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataGasOther.builder() + .wellCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .wellNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .devcode(devCode) +// .cell(cell) + .gasval(gas) + .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime))) + .logtime(new Date()) + .vbat(vbat) + .batsta(batsta) + .rsrp(rsrp) + .sin(pci) + .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) + .build());//存储采集数据 + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) continue; + + //3.清除设备告警 + alarmRecordsService.cancelDeviceAlarm(devCode); + //4.存报警 + //若没绑定井,则不产生报警 + boolean alarmFlag = false; + if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { + //获取报警规则 + List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); + for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { + if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && + Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { + alarmFlag = true; + //写入报警 + //1、判断报警是否已存在 + if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.TubeOther.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); + //7.更新管线状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java index d248540..b33a1ee 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java @@ -91,7 +91,6 @@ } - public List getBusAlarmLedgerList(String devCode) { return this.dataGasMapper.getListByDevCode(devCode); } @@ -113,6 +112,13 @@ for (int i = 0; i < jsonArray.size(); i++) { try { String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) .findFirst(); @@ -175,18 +181,18 @@ alarmRecordsService.cancelDeviceAlarm(devCode); //4.存报警 //若没绑定井,则不产生报警 - boolean alarmFlag = false; + boolean alarmFlag = false; if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { //获取报警规则 List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { - alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); } break; } @@ -197,7 +203,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及设备状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新监测井状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java index e848fce..6297093 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java @@ -84,42 +84,78 @@ } - @Transactional - public void processAlarmData(JSONObject jsonObject, String devCode) { - JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + public void processEventAlarm(String devCode, String eventTypeCode, String logTime, String eventValue) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - //获取报警事件 - List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - - List busWellDTOList = dataGasMapper.getListByDevCode(devCode); - //若没绑定井,则不产生报警 - if (busWellDTOList != null && busWellDTOList.size() > 0) { - - for (int i = 0; i < jsonArray.size(); i++) { + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + //特殊处理消警 + if ("0".equals(eventValue)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, eventTypeCode); + } + return; } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> eventTypeCode.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 - if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + if (!alarmDeviceRuleResponseDTO.isPresent()) return; //1.查询是否已存在该类报警 - if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) return; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); - - + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + } + } + } + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + try { + String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmEventCode)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } } } } @@ -169,7 +205,76 @@ .rightVibrateAlarm(VibR) .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(uptime))) .logtime(new Date()) - .build());//存储采集数据 + .build()); + + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + ruleResponseDTOList.forEach(ruleResponseDTO -> { + + if ("Sloping".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Sloping)&&(!alarmRecordsService.isWatchAlarms(devCode,"Sloping"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Sloping", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Sloping)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Sloping"); + + } + } + if ("Destroy".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Destroy)&&(!alarmRecordsService.isWatchAlarms(devCode,"Destroy"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Destroy", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Destroy)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Destroy"); + + } + } + if ("Leak".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Leak)&&(!alarmRecordsService.isWatchAlarms(devCode,"Leak"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Leak", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Leak)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Leak"); + + } + } + if ("DiscL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscL)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscL"); + + } + } + if ("DiscR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscR)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscR"); + } + } + + if ("VibL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibL)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibL"); + } + } + if ("VibR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibR)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibR"); + } + } + }); + +// //处理报警事件 +// processEventAlarm(devCode,"Sloping",uptime,Sloping); +// processEventAlarm(devCode,"Destroy",uptime,Destroy); +// processEventAlarm(devCode,"Leak",uptime,Leak); +// processEventAlarm(devCode,"DiscL",uptime,DiscL); +// processEventAlarm(devCode,"DiscR",uptime,DiscR); +// processEventAlarm(devCode,"VibL",uptime,VibL); +// processEventAlarm(devCode,"VibR",uptime,VibR); + //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -197,7 +302,7 @@ if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && gas >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), gas)) { @@ -213,7 +318,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R,alarmFlag?"燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R, alarmFlag ? "燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java index f913775..895d201 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java @@ -89,6 +89,7 @@ String bfcf = busDeviceService.getBfcf(devCode); if (DictEnum.BF_ON.equals(bfcf)) { JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); //获取报警事件 List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); List busWellDTOList = dataGasMapper.getListByDevCode(devCode); @@ -96,25 +97,43 @@ if (busWellDTOList != null && busWellDTOList.size() > 0) { for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 if (!alarmDeviceRuleResponseDTO.isPresent()) continue; //1.查询是否已存在该类报警 if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { @@ -141,6 +160,9 @@ String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); gas = String.format("%.2f", Double.valueOf(gas)); //1.存数据 save(DataTubeOther.builder() @@ -156,6 +178,9 @@ .rsrp(rsrp) .sin(pci) .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) .build());//存储采集数据 //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -186,7 +211,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 98e736b..2288075 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -216,5 +216,15 @@ public ReturnDTO syncDeviceStatus() { return ReturnUtil.success(iBusDeviceService.syncDeviceStatus()); } + + @ApiOperation("根据闸井id获取设备信息") + @PostMapping("/getListByWellId") + @ResponseBody + public ReturnDTO getListByWellId(@RequestBody IdDTO idDTO) { + Assert.isFalse(ObjectUtil.isEmpty(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iBusDeviceService.getListByWellId(idDTO.getId())); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java index 72a2d84..d6d9743 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java @@ -85,6 +85,7 @@ return ReturnUtil.success(iBusLedgerService.detail(idDTO.getId())); } + /** * 同步三级部门 * diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java index 9e412d2..4316b56 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java @@ -1,22 +1,33 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.response.ErrorResponseData; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; +import com.casic.missiles.modular.device.dto.BusPositionImportDTO; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.ReturnUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataAccessException; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; /** @@ -40,8 +51,44 @@ @PostMapping("/addPosition") @ResponseBody public ReturnDTO addPosition(@RequestBody BusLedgerPipe busLedgerPipe) { + + List busLedgerPipeList = iBusLedgerPipeService.getListByNumber(busLedgerPipe.getTagNumber()); + if(busLedgerPipeList!=null&&busLedgerPipeList.size()>0){ + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE,"安装位号已存!!!"); + } + Long id =IdUtil.getSnowflake(1,2).nextId(); + busLedgerPipe.setId(id); iBusLedgerPipeService.save(busLedgerPipe); - return ReturnUtil.success(busLedgerPipe.getId()); + return ReturnUtil.success(id); + } + + @ApiOperation("批量导入") + @RequestMapping(value = "/batchImport", method = RequestMethod.POST) + @ResponseBody + public Object batchImport(@RequestParam("file") MultipartFile file) { + List results = new ArrayList<>(); + try { + results = this.importExcel(BusPositionImportDTO.class, file, null, null); + List list = iBusLedgerPipeService.addPositionBatch(results); + if (!CollectionUtil.isEmpty(list)) { + //获取校验报错信息 + return new ErrorResponseData(list.get(0)); + } + } catch (Exception e) { + return catchMybatisPlusException(e, "导入位置信息失败"); + } + return ResponseData.success(); + } + + private ResponseData catchMybatisPlusException(Exception e, String errorMsg) { + if (e instanceof DataAccessException) { + DataAccessException mybatisPlusException = (DataAccessException) e; + String message = mybatisPlusException.getRootCause().getMessage(); + if (message.contains("Duplicate entry '")) { + return new ErrorResponseData("安装位号重复:" + message.replaceAll("Duplicate entry '", "").replaceAll("' for key 'DEVCODE'", "")); + } + } + return new ErrorResponseData(errorMsg); } @ApiOperation("编辑点位") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java index d1e08a8..d938876 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java @@ -51,6 +51,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getOperatorName()), "CREATE_USER", request.getOperatorName()); queryWrapper.ge(ObjectUtil.isNotEmpty(request.getStartTime()), "START_TIME", request.getStartTime()); queryWrapper.le(ObjectUtil.isNotEmpty(request.getEndTime()), "END_TIME", request.getEndTime()); + queryWrapper.orderByDesc("START_TIME"); return ReturnUtil.success(super.packForBT(iSyncLogService.page(page, queryWrapper))); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java index 5ee5291..23ddee9 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java @@ -73,4 +73,12 @@ " where bd.DEVCODE= #{devcode} and bd.VALID=1 " + ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD asc") List getDeviceTypeRule(@Param("devcode") String devcode); + + + @Select("SELECT bd.* from bus_device bd " + + "left JOIN bus_device_ledger bl on bd.id= bl.DEVICE_ID and bl.VALID=1 " + + "LEFT JOIN bus_ledger_all_view bv on bv.id= bl.LEDGER_ID and bv.type= bl.TYPE and bv.VALID=1 " + + "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") + List getListByWellId(@Param("wellId") Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java index e1d16c4..a4c3f7a 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java @@ -37,7 +37,7 @@ @Select("SELECT b.ORG_ID,b.ORG_CODE,b.ORG_NAME,b.PARENT_ID FROM `bus_sync_org_relation` b WHERE b.DEL_FLAG =0 and b.PARENT_ID = #{syncId} ") List synDept(@Param("syncId") String syncId); - @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view ") + @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view where VALID=1") List getBusLedgers(); @Select("SELECT DEVCODE FROM `bus_device` where VALID>0 ") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml index 99ef10b..c6d1fff 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml @@ -29,6 +29,7 @@ bp.DEVICE_MODEL as deviceModel, bt.TYPE_NAME as typeName, + bp.DATA_SERVICE as deviceCategory, bm.`NAME` as manufactureName, bl.tagNumber as tagNumber, bl.id as ledgerId, @@ -81,6 +82,10 @@ and bd.LOGTIME #{request.logTime2} + + and bp.DATA_SERVICE =#{request.deviceCategory} + + ORDER BY bd.INSTALL_DATE DESC diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml index bdadb6a..d3f4684 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml @@ -40,7 +40,7 @@ `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + AND bdl.VALID = 1 JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -99,8 +99,8 @@ bm.`NAME` as manufactureName FROM `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE - LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID and bdl.type=blp.type + AND bdl.VALID = 1 LEFT JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -117,7 +117,9 @@ WITH station_temp as(SELECT bl.ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID FROM `bus_ledger` bl where bl.VALID=1 and bl.TYPE =2) - select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME from station_temp bl + select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME,bd.DEVCODE from station_temp bl left join bus_device_ledger bdl on bdl.LEDGER_ID = bl.ID and bdl.TYPE =2 and bdl.valid=1 left join bus_device bd on bd.id= bdl.DEVICE_ID and bd.VALID=1 order by bl.ID diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml index 7b92b04..1d97c64 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml @@ -184,7 +184,7 @@ WHERE EQ_LOCNO like 'N%' and - EQ_CATEGORY in (1,3) + EQ_CATEGORY in (1,2,3,5) diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java index 859cf08..143b42d 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java @@ -23,6 +23,9 @@ @ApiModelProperty("设备类型id") private Long typeId; + @ApiModelProperty("产品名称") + private String productName; + @ApiModelProperty("指令集合") private List commandConfigList; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java index 646610b..2cb5894 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("最新上传结束时间") private String logTime2; + + @ApiModelProperty("设备类别(0:自有设备,1:数据服务)") + private String deviceCategory; } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java index 8c95537..28b30fa 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java @@ -44,6 +44,9 @@ @ExcelProperty("关联管线") private String pipeCode; + @ExcelProperty("监测类型") + private String monitorType; + private String watchObject; private Long deviceType; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java index 0980c34..ac5daf0 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java @@ -24,4 +24,7 @@ @ApiModelProperty("详细位置") private String position; + @ApiModelProperty("1:其他,3:管线") + private String type; + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java new file mode 100644 index 0000000..bce7ebd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.device.dto; + + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class BusPositionImportDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + + @ExcelProperty("管线编号") + private String pipeCode; + + @ExcelProperty("安装位号") + private String tagNumber; + + @ExcelProperty("经度(高德)") + private String lngGaode; + + @ExcelProperty("纬度(高德)") + private String latGaode; + + @ExcelProperty("详细位置") + private String position; + + @ExcelProperty("管理单位") + private Long deptid; + + @ExcelProperty("位置类别") + private String type; + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java index 58faa0e..d72ae78 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java @@ -16,13 +16,13 @@ private String deviceId; //移动命令:left right up down left_up left_down right_up right_down GOTO_PRESET - @ApiModelProperty("移动命令") + @ApiModelProperty("移动命令(left right up down left_up left_down right_up right_down)") private String command; - @ApiModelProperty("速度") + @ApiModelProperty("速度,一般传100") private String speed; - @ApiModelProperty("启停命令") + @ApiModelProperty("启停命令(0:开始,1:结束)") private String cameraAction; @ApiModelProperty("预置点编号") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java index b4ec73c..5a3d0b0 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java @@ -66,7 +66,7 @@ private String powerSupplyMode; - @ApiModelProperty("是否结束数据服务") + @ApiModelProperty("是否结束数据服务(1:是,0:否)") @TableField("DATA_SERVICE") private String dataService; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java index 1184995..407e3c1 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java @@ -193,10 +193,14 @@ @TableField(exist = false) private String bfztName; + @ApiModelProperty("设备类别(0:自有设备,1:数据服务)") + @TableField(exist = false) + private String deviceCategory; + public BusDevice() { } - public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds) { + public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds, String monitorType) { this.devcode = devcode; this.deviceType = deviceType; this.productId = productId; @@ -204,6 +208,7 @@ this.installDate = installDate; this.watchObject = watchObject; this.ledgerIds = ledgerIds; + this.monitorType = monitorType; } public static List convertDeviceList(List dtoList) { @@ -227,7 +232,8 @@ deviceImportDTO.getValid(), deviceImportDTO.getInstallDate(), deviceImportDTO.getWatchObject(), - deviceImportDTO.getLedgerIds())); + deviceImportDTO.getLedgerIds(), + deviceImportDTO.getMonitorType())); }); return busDeviceList; } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java index 12b52de..1ac8455 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java @@ -1,16 +1,20 @@ package com.casic.missiles.modular.device.entity; +import cn.hutool.core.util.IdUtil; 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 com.casic.missiles.modular.device.dto.BusPositionImportDTO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import java.io.Serializable; +import java.util.ArrayList; import java.util.Date; +import java.util.List; /** *

@@ -29,7 +33,7 @@ private static final long serialVersionUID = 1L; @ApiModelProperty("主键") - @TableId(value = "ID", type = IdType.AUTO) +// @TableId(value = "ID", type = IdType.AUTO) private Long id; @ApiModelProperty("编号") @@ -60,6 +64,10 @@ @TableField("DEPTID") private Long deptid; + @ApiModelProperty("类别(1:其他,3:管线)") + @TableField("`TYPE`") + private String type; + @ApiModelProperty("责任部门") @TableField("RESPONSIBLE_DEPT") private Long responsibleDept; @@ -110,9 +118,10 @@ public BusLedgerPipe() { } - public BusLedgerPipe(String pipeCode, String ledgerName, String tagNumber, + public BusLedgerPipe(Long id,String pipeCode, String ledgerName, String tagNumber, String lngGaode, String latGaode, String position, - Long deptid, String devcode) { + Long deptid, String devcode, String type) { + this.id=id; this.pipeCode = pipeCode; this.ledgerName = ledgerName; this.tagNumber = tagNumber; @@ -121,5 +130,26 @@ this.position = position; this.deptid = deptid; this.devcode = devcode; + this.type = type; } + + public static List convertDeviceList(List dtoList) { + + + List busDeviceList = new ArrayList<>(); + dtoList.forEach(positionImportDTO -> { + + busDeviceList.add(new BusLedgerPipe(IdUtil.getSnowflake(1,2).nextId(),positionImportDTO.getPipeCode(), + positionImportDTO.getTagNumber(), + positionImportDTO.getTagNumber(), + positionImportDTO.getLngGaode(), + positionImportDTO.getLatGaode(), + positionImportDTO.getPosition(), + positionImportDTO.getDeptid(), + "", + positionImportDTO.getType())); + }); + return busDeviceList; + } + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java index aaaa409..63c0576 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java @@ -52,4 +52,8 @@ List getDeviceRule(String devcode); + List getDevicesByCodes(List devcodes); + + List getListByWellId(Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java index 14f6a93..8692383 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java @@ -2,11 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; -import com.casic.missiles.core.datascope.DataScope; -import com.casic.missiles.modular.device.dto.BusLedgerPipeMonitorRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeResponseDTO; -import com.casic.missiles.modular.device.dto.MonitorDataRequestDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import java.util.List; @@ -26,17 +22,21 @@ Page monitorPipePageList(Page page, BusLedgerPipeMonitorRequestDTO request); - BusLedgerPipeResponseDTO detail(Long id,String devcode); + BusLedgerPipeResponseDTO detail(Long id, String devcode); - List> watchDataByPipe(MonitorDataRequestDTO requestDTO); + List> watchDataByPipe(MonitorDataRequestDTO requestDTO); - List> pipeList(); + List> pipeList(); - List> deviceList(); + List> deviceList(); BusLedgerPipe saveBusLedgerPipe(BusLedgerPipe busLedgerPipe); Boolean updateMonitorStatus(List tagNumbers); + List addPositionBatch(List results); + + List getListByNumber(String tagNumber); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java new file mode 100644 index 0000000..fc881a1 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.data.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 外协管盯 前端控制器 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RestController +@RequestMapping("/system/dataGasOther") +public class DataGasOtherController { + +} + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java new file mode 100644 index 0000000..b5f3627 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.data.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 外协管盯 Mapper 接口 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Mapper +public interface DataGasOtherMapper extends BaseMapper { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml new file mode 100644 index 0000000..8ce1455 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID, DEVCODE, WELL_CODE, WELL_NUMBER, GASVAL, VBAT, BATSTA, SIN, RSRP, SINR, UPTIME, LOGTIME, SIG, TEMP, SS_STATE + + + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java new file mode 100644 index 0000000..53972ba --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java @@ -0,0 +1,94 @@ +package com.casic.missiles.modular.data.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 外协管盯 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Builder +@Data +@TableName("data_gas_other") +@ApiModel(value = "DataGasOther对象", description = "外协管盯") +public class DataGasOther implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId("ID") + private Long id; + + @ApiModelProperty("设备编号") + @TableField("DEVCODE") + private String devcode; + + @ApiModelProperty("点位编号") + @TableField("WELL_CODE") + private String wellCode; + + @ApiModelProperty("位号") + @TableField("WELL_NUMBER") + private String wellNumber; + + @ApiModelProperty("气体浓度采样值") + @TableField("GASVAL") + private String gasval; + + @ApiModelProperty("设备电池电压值(毫伏)") + @TableField("VBAT") + private String vbat; + + @ApiModelProperty("电池状态0 正常、 1 低电告警、2 关机") + @TableField("BATSTA") + private String batsta; + + @ApiModelProperty("接收信号强度等级") + @TableField("SIN") + private String sin; + + @ApiModelProperty("接收信号参考质量 服务小 区的 RSRP 值") + @TableField("RSRP") + private String rsrp; + + @ApiModelProperty("信噪比") + @TableField("SINR") + private String sinr; + + @ApiModelProperty("采集时间") + @TableField("UPTIME") + private Date uptime; + + @ApiModelProperty("上传时间") + @TableField("LOGTIME") + private Date logtime; + + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态,0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java index 86077b8..f4d4417 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java @@ -76,4 +76,17 @@ private Date logtime; + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态:0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java new file mode 100644 index 0000000..842ca0b --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.data.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.data.entity.DataGasOther; + +/** + *

+ * 外协管盯 服务类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +public interface IDataGasOtherService extends IService { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java new file mode 100644 index 0000000..4c660e9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java @@ -0,0 +1,226 @@ +package com.casic.missiles.modular.data.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.enums.DeviceTypeEnum; +import com.casic.missiles.enums.DictEnum; +import com.casic.missiles.modular.alarm.dto.AlarmDeviceRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.AlarmRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.BusAlarmLedgerDTO; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.data.dao.DataGasMapper; +import com.casic.missiles.modular.data.dao.DataGasOtherMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import com.casic.missiles.modular.data.entity.DataTubeOther; +import com.casic.missiles.modular.data.service.IDataAbstractService; +import com.casic.missiles.modular.data.service.IDataGasOtherService; +import com.casic.missiles.modular.data.service.ITrackLogService; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Optional; + +/** + *

+ * 外协管盯 服务实现类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RequiredArgsConstructor +@Service +public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { + + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + private final DataGasMapper dataGasMapper; + private final IAlarmRecordsService alarmRecordsService; + private final IAlarmRuleService alarmRuleService; + private final ITrackLogService iTrackLogService; + private final IBusDeviceService busDeviceService; + + @Override + public void process(String dataContent) { + + //解析数据+根据业务处理存储数据 + JSONObject json = JSONObject.parseObject(dataContent); + String devCode = json.get("devCode").toString(); + JSONObject jsonObject = json.getJSONObject("mBody"); + if (mType[0].equals(json.get("mType")) || mType[3].equals(json.get("mType"))) {//存储上报数据 + this.processNormalData(jsonObject, devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + this.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.TubeOther.name().equals(json.get("devType"))) { + if ("TubeOtherConfigSuccess".equals(jsonObject.get("bType"))) { +// deviceConfigManager.updateStatus(devCode); + } + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } else if (mType[4].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); +// imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; + try { + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); + } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + } + } + + @Transactional + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.getString("cell"); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = jsonObject.getJSONArray("datas"); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + String bfcf = busDeviceService.getBfcf(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).getString("gasval"); + String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); + String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); + String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataGasOther.builder() + .wellCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .wellNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .devcode(devCode) +// .cell(cell) + .gasval(gas) + .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime))) + .logtime(new Date()) + .vbat(vbat) + .batsta(batsta) + .rsrp(rsrp) + .sin(pci) + .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) + .build());//存储采集数据 + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) continue; + + //3.清除设备告警 + alarmRecordsService.cancelDeviceAlarm(devCode); + //4.存报警 + //若没绑定井,则不产生报警 + boolean alarmFlag = false; + if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { + //获取报警规则 + List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); + for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { + if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && + Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { + alarmFlag = true; + //写入报警 + //1、判断报警是否已存在 + if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.TubeOther.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); + //7.更新管线状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java index d248540..b33a1ee 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java @@ -91,7 +91,6 @@ } - public List getBusAlarmLedgerList(String devCode) { return this.dataGasMapper.getListByDevCode(devCode); } @@ -113,6 +112,13 @@ for (int i = 0; i < jsonArray.size(); i++) { try { String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) .findFirst(); @@ -175,18 +181,18 @@ alarmRecordsService.cancelDeviceAlarm(devCode); //4.存报警 //若没绑定井,则不产生报警 - boolean alarmFlag = false; + boolean alarmFlag = false; if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { //获取报警规则 List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { - alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); } break; } @@ -197,7 +203,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及设备状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新监测井状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java index e848fce..6297093 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java @@ -84,42 +84,78 @@ } - @Transactional - public void processAlarmData(JSONObject jsonObject, String devCode) { - JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + public void processEventAlarm(String devCode, String eventTypeCode, String logTime, String eventValue) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - //获取报警事件 - List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - - List busWellDTOList = dataGasMapper.getListByDevCode(devCode); - //若没绑定井,则不产生报警 - if (busWellDTOList != null && busWellDTOList.size() > 0) { - - for (int i = 0; i < jsonArray.size(); i++) { + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + //特殊处理消警 + if ("0".equals(eventValue)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, eventTypeCode); + } + return; } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> eventTypeCode.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 - if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + if (!alarmDeviceRuleResponseDTO.isPresent()) return; //1.查询是否已存在该类报警 - if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) return; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); - - + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + } + } + } + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + try { + String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmEventCode)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } } } } @@ -169,7 +205,76 @@ .rightVibrateAlarm(VibR) .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(uptime))) .logtime(new Date()) - .build());//存储采集数据 + .build()); + + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + ruleResponseDTOList.forEach(ruleResponseDTO -> { + + if ("Sloping".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Sloping)&&(!alarmRecordsService.isWatchAlarms(devCode,"Sloping"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Sloping", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Sloping)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Sloping"); + + } + } + if ("Destroy".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Destroy)&&(!alarmRecordsService.isWatchAlarms(devCode,"Destroy"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Destroy", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Destroy)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Destroy"); + + } + } + if ("Leak".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Leak)&&(!alarmRecordsService.isWatchAlarms(devCode,"Leak"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Leak", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Leak)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Leak"); + + } + } + if ("DiscL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscL)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscL"); + + } + } + if ("DiscR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscR)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscR"); + } + } + + if ("VibL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibL)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibL"); + } + } + if ("VibR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibR)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibR"); + } + } + }); + +// //处理报警事件 +// processEventAlarm(devCode,"Sloping",uptime,Sloping); +// processEventAlarm(devCode,"Destroy",uptime,Destroy); +// processEventAlarm(devCode,"Leak",uptime,Leak); +// processEventAlarm(devCode,"DiscL",uptime,DiscL); +// processEventAlarm(devCode,"DiscR",uptime,DiscR); +// processEventAlarm(devCode,"VibL",uptime,VibL); +// processEventAlarm(devCode,"VibR",uptime,VibR); + //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -197,7 +302,7 @@ if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && gas >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), gas)) { @@ -213,7 +318,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R,alarmFlag?"燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R, alarmFlag ? "燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java index f913775..895d201 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java @@ -89,6 +89,7 @@ String bfcf = busDeviceService.getBfcf(devCode); if (DictEnum.BF_ON.equals(bfcf)) { JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); //获取报警事件 List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); List busWellDTOList = dataGasMapper.getListByDevCode(devCode); @@ -96,25 +97,43 @@ if (busWellDTOList != null && busWellDTOList.size() > 0) { for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 if (!alarmDeviceRuleResponseDTO.isPresent()) continue; //1.查询是否已存在该类报警 if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { @@ -141,6 +160,9 @@ String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); gas = String.format("%.2f", Double.valueOf(gas)); //1.存数据 save(DataTubeOther.builder() @@ -156,6 +178,9 @@ .rsrp(rsrp) .sin(pci) .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) .build());//存储采集数据 //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -186,7 +211,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 98e736b..2288075 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -216,5 +216,15 @@ public ReturnDTO syncDeviceStatus() { return ReturnUtil.success(iBusDeviceService.syncDeviceStatus()); } + + @ApiOperation("根据闸井id获取设备信息") + @PostMapping("/getListByWellId") + @ResponseBody + public ReturnDTO getListByWellId(@RequestBody IdDTO idDTO) { + Assert.isFalse(ObjectUtil.isEmpty(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iBusDeviceService.getListByWellId(idDTO.getId())); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java index 72a2d84..d6d9743 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java @@ -85,6 +85,7 @@ return ReturnUtil.success(iBusLedgerService.detail(idDTO.getId())); } + /** * 同步三级部门 * diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java index 9e412d2..4316b56 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java @@ -1,22 +1,33 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.response.ErrorResponseData; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; +import com.casic.missiles.modular.device.dto.BusPositionImportDTO; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.ReturnUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataAccessException; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; /** @@ -40,8 +51,44 @@ @PostMapping("/addPosition") @ResponseBody public ReturnDTO addPosition(@RequestBody BusLedgerPipe busLedgerPipe) { + + List busLedgerPipeList = iBusLedgerPipeService.getListByNumber(busLedgerPipe.getTagNumber()); + if(busLedgerPipeList!=null&&busLedgerPipeList.size()>0){ + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE,"安装位号已存!!!"); + } + Long id =IdUtil.getSnowflake(1,2).nextId(); + busLedgerPipe.setId(id); iBusLedgerPipeService.save(busLedgerPipe); - return ReturnUtil.success(busLedgerPipe.getId()); + return ReturnUtil.success(id); + } + + @ApiOperation("批量导入") + @RequestMapping(value = "/batchImport", method = RequestMethod.POST) + @ResponseBody + public Object batchImport(@RequestParam("file") MultipartFile file) { + List results = new ArrayList<>(); + try { + results = this.importExcel(BusPositionImportDTO.class, file, null, null); + List list = iBusLedgerPipeService.addPositionBatch(results); + if (!CollectionUtil.isEmpty(list)) { + //获取校验报错信息 + return new ErrorResponseData(list.get(0)); + } + } catch (Exception e) { + return catchMybatisPlusException(e, "导入位置信息失败"); + } + return ResponseData.success(); + } + + private ResponseData catchMybatisPlusException(Exception e, String errorMsg) { + if (e instanceof DataAccessException) { + DataAccessException mybatisPlusException = (DataAccessException) e; + String message = mybatisPlusException.getRootCause().getMessage(); + if (message.contains("Duplicate entry '")) { + return new ErrorResponseData("安装位号重复:" + message.replaceAll("Duplicate entry '", "").replaceAll("' for key 'DEVCODE'", "")); + } + } + return new ErrorResponseData(errorMsg); } @ApiOperation("编辑点位") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java index d1e08a8..d938876 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java @@ -51,6 +51,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getOperatorName()), "CREATE_USER", request.getOperatorName()); queryWrapper.ge(ObjectUtil.isNotEmpty(request.getStartTime()), "START_TIME", request.getStartTime()); queryWrapper.le(ObjectUtil.isNotEmpty(request.getEndTime()), "END_TIME", request.getEndTime()); + queryWrapper.orderByDesc("START_TIME"); return ReturnUtil.success(super.packForBT(iSyncLogService.page(page, queryWrapper))); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java index 5ee5291..23ddee9 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java @@ -73,4 +73,12 @@ " where bd.DEVCODE= #{devcode} and bd.VALID=1 " + ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD asc") List getDeviceTypeRule(@Param("devcode") String devcode); + + + @Select("SELECT bd.* from bus_device bd " + + "left JOIN bus_device_ledger bl on bd.id= bl.DEVICE_ID and bl.VALID=1 " + + "LEFT JOIN bus_ledger_all_view bv on bv.id= bl.LEDGER_ID and bv.type= bl.TYPE and bv.VALID=1 " + + "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") + List getListByWellId(@Param("wellId") Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java index e1d16c4..a4c3f7a 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java @@ -37,7 +37,7 @@ @Select("SELECT b.ORG_ID,b.ORG_CODE,b.ORG_NAME,b.PARENT_ID FROM `bus_sync_org_relation` b WHERE b.DEL_FLAG =0 and b.PARENT_ID = #{syncId} ") List synDept(@Param("syncId") String syncId); - @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view ") + @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view where VALID=1") List getBusLedgers(); @Select("SELECT DEVCODE FROM `bus_device` where VALID>0 ") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml index 99ef10b..c6d1fff 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml @@ -29,6 +29,7 @@ bp.DEVICE_MODEL as deviceModel, bt.TYPE_NAME as typeName, + bp.DATA_SERVICE as deviceCategory, bm.`NAME` as manufactureName, bl.tagNumber as tagNumber, bl.id as ledgerId, @@ -81,6 +82,10 @@ and bd.LOGTIME #{request.logTime2} + + and bp.DATA_SERVICE =#{request.deviceCategory} + + ORDER BY bd.INSTALL_DATE DESC diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml index bdadb6a..d3f4684 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml @@ -40,7 +40,7 @@ `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + AND bdl.VALID = 1 JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -99,8 +99,8 @@ bm.`NAME` as manufactureName FROM `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE - LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID and bdl.type=blp.type + AND bdl.VALID = 1 LEFT JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -117,7 +117,9 @@ WITH station_temp as(SELECT bl.ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID FROM `bus_ledger` bl where bl.VALID=1 and bl.TYPE =2) - select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME from station_temp bl + select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME,bd.DEVCODE from station_temp bl left join bus_device_ledger bdl on bdl.LEDGER_ID = bl.ID and bdl.TYPE =2 and bdl.valid=1 left join bus_device bd on bd.id= bdl.DEVICE_ID and bd.VALID=1 order by bl.ID diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml index 7b92b04..1d97c64 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml @@ -184,7 +184,7 @@ WHERE EQ_LOCNO like 'N%' and - EQ_CATEGORY in (1,3) + EQ_CATEGORY in (1,2,3,5) diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java index 859cf08..143b42d 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java @@ -23,6 +23,9 @@ @ApiModelProperty("设备类型id") private Long typeId; + @ApiModelProperty("产品名称") + private String productName; + @ApiModelProperty("指令集合") private List commandConfigList; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java index 646610b..2cb5894 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("最新上传结束时间") private String logTime2; + + @ApiModelProperty("设备类别(0:自有设备,1:数据服务)") + private String deviceCategory; } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java index 8c95537..28b30fa 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java @@ -44,6 +44,9 @@ @ExcelProperty("关联管线") private String pipeCode; + @ExcelProperty("监测类型") + private String monitorType; + private String watchObject; private Long deviceType; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java index 0980c34..ac5daf0 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java @@ -24,4 +24,7 @@ @ApiModelProperty("详细位置") private String position; + @ApiModelProperty("1:其他,3:管线") + private String type; + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java new file mode 100644 index 0000000..bce7ebd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.device.dto; + + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class BusPositionImportDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + + @ExcelProperty("管线编号") + private String pipeCode; + + @ExcelProperty("安装位号") + private String tagNumber; + + @ExcelProperty("经度(高德)") + private String lngGaode; + + @ExcelProperty("纬度(高德)") + private String latGaode; + + @ExcelProperty("详细位置") + private String position; + + @ExcelProperty("管理单位") + private Long deptid; + + @ExcelProperty("位置类别") + private String type; + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java index 58faa0e..d72ae78 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java @@ -16,13 +16,13 @@ private String deviceId; //移动命令:left right up down left_up left_down right_up right_down GOTO_PRESET - @ApiModelProperty("移动命令") + @ApiModelProperty("移动命令(left right up down left_up left_down right_up right_down)") private String command; - @ApiModelProperty("速度") + @ApiModelProperty("速度,一般传100") private String speed; - @ApiModelProperty("启停命令") + @ApiModelProperty("启停命令(0:开始,1:结束)") private String cameraAction; @ApiModelProperty("预置点编号") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java index b4ec73c..5a3d0b0 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java @@ -66,7 +66,7 @@ private String powerSupplyMode; - @ApiModelProperty("是否结束数据服务") + @ApiModelProperty("是否结束数据服务(1:是,0:否)") @TableField("DATA_SERVICE") private String dataService; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java index 1184995..407e3c1 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java @@ -193,10 +193,14 @@ @TableField(exist = false) private String bfztName; + @ApiModelProperty("设备类别(0:自有设备,1:数据服务)") + @TableField(exist = false) + private String deviceCategory; + public BusDevice() { } - public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds) { + public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds, String monitorType) { this.devcode = devcode; this.deviceType = deviceType; this.productId = productId; @@ -204,6 +208,7 @@ this.installDate = installDate; this.watchObject = watchObject; this.ledgerIds = ledgerIds; + this.monitorType = monitorType; } public static List convertDeviceList(List dtoList) { @@ -227,7 +232,8 @@ deviceImportDTO.getValid(), deviceImportDTO.getInstallDate(), deviceImportDTO.getWatchObject(), - deviceImportDTO.getLedgerIds())); + deviceImportDTO.getLedgerIds(), + deviceImportDTO.getMonitorType())); }); return busDeviceList; } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java index 12b52de..1ac8455 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java @@ -1,16 +1,20 @@ package com.casic.missiles.modular.device.entity; +import cn.hutool.core.util.IdUtil; 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 com.casic.missiles.modular.device.dto.BusPositionImportDTO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import java.io.Serializable; +import java.util.ArrayList; import java.util.Date; +import java.util.List; /** *

@@ -29,7 +33,7 @@ private static final long serialVersionUID = 1L; @ApiModelProperty("主键") - @TableId(value = "ID", type = IdType.AUTO) +// @TableId(value = "ID", type = IdType.AUTO) private Long id; @ApiModelProperty("编号") @@ -60,6 +64,10 @@ @TableField("DEPTID") private Long deptid; + @ApiModelProperty("类别(1:其他,3:管线)") + @TableField("`TYPE`") + private String type; + @ApiModelProperty("责任部门") @TableField("RESPONSIBLE_DEPT") private Long responsibleDept; @@ -110,9 +118,10 @@ public BusLedgerPipe() { } - public BusLedgerPipe(String pipeCode, String ledgerName, String tagNumber, + public BusLedgerPipe(Long id,String pipeCode, String ledgerName, String tagNumber, String lngGaode, String latGaode, String position, - Long deptid, String devcode) { + Long deptid, String devcode, String type) { + this.id=id; this.pipeCode = pipeCode; this.ledgerName = ledgerName; this.tagNumber = tagNumber; @@ -121,5 +130,26 @@ this.position = position; this.deptid = deptid; this.devcode = devcode; + this.type = type; } + + public static List convertDeviceList(List dtoList) { + + + List busDeviceList = new ArrayList<>(); + dtoList.forEach(positionImportDTO -> { + + busDeviceList.add(new BusLedgerPipe(IdUtil.getSnowflake(1,2).nextId(),positionImportDTO.getPipeCode(), + positionImportDTO.getTagNumber(), + positionImportDTO.getTagNumber(), + positionImportDTO.getLngGaode(), + positionImportDTO.getLatGaode(), + positionImportDTO.getPosition(), + positionImportDTO.getDeptid(), + "", + positionImportDTO.getType())); + }); + return busDeviceList; + } + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java index aaaa409..63c0576 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java @@ -52,4 +52,8 @@ List getDeviceRule(String devcode); + List getDevicesByCodes(List devcodes); + + List getListByWellId(Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java index 14f6a93..8692383 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java @@ -2,11 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; -import com.casic.missiles.core.datascope.DataScope; -import com.casic.missiles.modular.device.dto.BusLedgerPipeMonitorRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeResponseDTO; -import com.casic.missiles.modular.device.dto.MonitorDataRequestDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import java.util.List; @@ -26,17 +22,21 @@ Page monitorPipePageList(Page page, BusLedgerPipeMonitorRequestDTO request); - BusLedgerPipeResponseDTO detail(Long id,String devcode); + BusLedgerPipeResponseDTO detail(Long id, String devcode); - List> watchDataByPipe(MonitorDataRequestDTO requestDTO); + List> watchDataByPipe(MonitorDataRequestDTO requestDTO); - List> pipeList(); + List> pipeList(); - List> deviceList(); + List> deviceList(); BusLedgerPipe saveBusLedgerPipe(BusLedgerPipe busLedgerPipe); Boolean updateMonitorStatus(List tagNumbers); + List addPositionBatch(List results); + + List getListByNumber(String tagNumber); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java index 66ed812..ad72230 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java @@ -12,9 +12,12 @@ import com.casic.missiles.modular.device.dto.BusConfigOtherDTO; import com.casic.missiles.modular.device.dto.BusConfigRequestDTO; import com.casic.missiles.modular.device.entity.BusConfig; +import com.casic.missiles.modular.device.entity.BusDevice; import com.casic.missiles.modular.device.service.IBusConfigService; +import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.HttpClientUtils; import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -22,6 +25,9 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.LinkedBlockingDeque; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; /** *

@@ -36,6 +42,11 @@ public class BusConfigServiceImpl extends ServiceImpl implements IBusConfigService { private final AbstractPermissionContext abstractPermissionContext; + private final IBusDeviceService iBusDeviceService; + private final ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(3, 6, 60, TimeUnit.SECONDS, new LinkedBlockingDeque<>(10)); + + @Value("${casic.brSendConfigUrl}") + private String brSendConfigUrl; @Transactional @Override @@ -105,6 +116,42 @@ .operator(user != null ? user.getId() : null) .operatorName(user != null ? user.getName() : "").build()); }); + + + threadPoolExecutor.execute( + () -> { + //发送第三方下发: + if (busConfigOtherDTO.getProductName().contains("管网哨兵")) { + List busDeviceList = iBusDeviceService.getDevicesByCodes(devcodes); + for (BusDevice busDevice : busDeviceList) { + if (ObjectUtil.isAllNotEmpty(busDevice.getNbProductId(), busDevice.getNbDeviceId())) { + Map commandMap = new HashMap<>(); + commandMap.put("productId", busDevice.getNbProductId()); + commandMap.put("devCode", busDevice.getDevcode()); + commandMap.put("deviceId", busDevice.getNbDeviceId()); + commandMap.put("cmdList", busConfigOtherDTO.getCommandConfigList()); + HttpClientUtils.post(brSendConfigUrl+"/tube/config/send", JSON.toJSONString(commandMap)); + } + } + } else if (busConfigOtherDTO.getProductName().contains("智能警示桩")) { + + List busDeviceList = iBusDeviceService.getDevicesByCodes(devcodes); + for (BusDevice busDevice : busDeviceList) { + if (ObjectUtil.isAllNotEmpty(busDevice.getNbProductId(), busDevice.getNbDeviceId())) { + Map commandMap = new HashMap<>(); + commandMap.put("productId", busDevice.getNbProductId()); + commandMap.put("devCode", busDevice.getDevcode()); + commandMap.put("deviceId", busDevice.getNbDeviceId()); + commandMap.put("cmdList", busConfigOtherDTO.getCommandConfigList()); + HttpClientUtils.post(brSendConfigUrl+"/sentinel/config/send", JSON.toJSONString(commandMap)); + } + } + + } + } + ); + + return this.saveBatch(busConfigs); // List> mapList = new ArrayList<>(); // Map commandMap = new HashMap<>(); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java new file mode 100644 index 0000000..fc881a1 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.data.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 外协管盯 前端控制器 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RestController +@RequestMapping("/system/dataGasOther") +public class DataGasOtherController { + +} + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java new file mode 100644 index 0000000..b5f3627 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.data.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 外协管盯 Mapper 接口 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Mapper +public interface DataGasOtherMapper extends BaseMapper { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml new file mode 100644 index 0000000..8ce1455 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID, DEVCODE, WELL_CODE, WELL_NUMBER, GASVAL, VBAT, BATSTA, SIN, RSRP, SINR, UPTIME, LOGTIME, SIG, TEMP, SS_STATE + + + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java new file mode 100644 index 0000000..53972ba --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java @@ -0,0 +1,94 @@ +package com.casic.missiles.modular.data.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 外协管盯 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Builder +@Data +@TableName("data_gas_other") +@ApiModel(value = "DataGasOther对象", description = "外协管盯") +public class DataGasOther implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId("ID") + private Long id; + + @ApiModelProperty("设备编号") + @TableField("DEVCODE") + private String devcode; + + @ApiModelProperty("点位编号") + @TableField("WELL_CODE") + private String wellCode; + + @ApiModelProperty("位号") + @TableField("WELL_NUMBER") + private String wellNumber; + + @ApiModelProperty("气体浓度采样值") + @TableField("GASVAL") + private String gasval; + + @ApiModelProperty("设备电池电压值(毫伏)") + @TableField("VBAT") + private String vbat; + + @ApiModelProperty("电池状态0 正常、 1 低电告警、2 关机") + @TableField("BATSTA") + private String batsta; + + @ApiModelProperty("接收信号强度等级") + @TableField("SIN") + private String sin; + + @ApiModelProperty("接收信号参考质量 服务小 区的 RSRP 值") + @TableField("RSRP") + private String rsrp; + + @ApiModelProperty("信噪比") + @TableField("SINR") + private String sinr; + + @ApiModelProperty("采集时间") + @TableField("UPTIME") + private Date uptime; + + @ApiModelProperty("上传时间") + @TableField("LOGTIME") + private Date logtime; + + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态,0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java index 86077b8..f4d4417 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java @@ -76,4 +76,17 @@ private Date logtime; + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态:0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java new file mode 100644 index 0000000..842ca0b --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.data.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.data.entity.DataGasOther; + +/** + *

+ * 外协管盯 服务类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +public interface IDataGasOtherService extends IService { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java new file mode 100644 index 0000000..4c660e9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java @@ -0,0 +1,226 @@ +package com.casic.missiles.modular.data.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.enums.DeviceTypeEnum; +import com.casic.missiles.enums.DictEnum; +import com.casic.missiles.modular.alarm.dto.AlarmDeviceRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.AlarmRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.BusAlarmLedgerDTO; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.data.dao.DataGasMapper; +import com.casic.missiles.modular.data.dao.DataGasOtherMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import com.casic.missiles.modular.data.entity.DataTubeOther; +import com.casic.missiles.modular.data.service.IDataAbstractService; +import com.casic.missiles.modular.data.service.IDataGasOtherService; +import com.casic.missiles.modular.data.service.ITrackLogService; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Optional; + +/** + *

+ * 外协管盯 服务实现类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RequiredArgsConstructor +@Service +public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { + + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + private final DataGasMapper dataGasMapper; + private final IAlarmRecordsService alarmRecordsService; + private final IAlarmRuleService alarmRuleService; + private final ITrackLogService iTrackLogService; + private final IBusDeviceService busDeviceService; + + @Override + public void process(String dataContent) { + + //解析数据+根据业务处理存储数据 + JSONObject json = JSONObject.parseObject(dataContent); + String devCode = json.get("devCode").toString(); + JSONObject jsonObject = json.getJSONObject("mBody"); + if (mType[0].equals(json.get("mType")) || mType[3].equals(json.get("mType"))) {//存储上报数据 + this.processNormalData(jsonObject, devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + this.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.TubeOther.name().equals(json.get("devType"))) { + if ("TubeOtherConfigSuccess".equals(jsonObject.get("bType"))) { +// deviceConfigManager.updateStatus(devCode); + } + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } else if (mType[4].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); +// imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; + try { + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); + } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + } + } + + @Transactional + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.getString("cell"); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = jsonObject.getJSONArray("datas"); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + String bfcf = busDeviceService.getBfcf(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).getString("gasval"); + String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); + String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); + String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataGasOther.builder() + .wellCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .wellNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .devcode(devCode) +// .cell(cell) + .gasval(gas) + .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime))) + .logtime(new Date()) + .vbat(vbat) + .batsta(batsta) + .rsrp(rsrp) + .sin(pci) + .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) + .build());//存储采集数据 + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) continue; + + //3.清除设备告警 + alarmRecordsService.cancelDeviceAlarm(devCode); + //4.存报警 + //若没绑定井,则不产生报警 + boolean alarmFlag = false; + if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { + //获取报警规则 + List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); + for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { + if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && + Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { + alarmFlag = true; + //写入报警 + //1、判断报警是否已存在 + if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.TubeOther.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); + //7.更新管线状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java index d248540..b33a1ee 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java @@ -91,7 +91,6 @@ } - public List getBusAlarmLedgerList(String devCode) { return this.dataGasMapper.getListByDevCode(devCode); } @@ -113,6 +112,13 @@ for (int i = 0; i < jsonArray.size(); i++) { try { String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) .findFirst(); @@ -175,18 +181,18 @@ alarmRecordsService.cancelDeviceAlarm(devCode); //4.存报警 //若没绑定井,则不产生报警 - boolean alarmFlag = false; + boolean alarmFlag = false; if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { //获取报警规则 List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { - alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); } break; } @@ -197,7 +203,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及设备状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新监测井状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java index e848fce..6297093 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java @@ -84,42 +84,78 @@ } - @Transactional - public void processAlarmData(JSONObject jsonObject, String devCode) { - JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + public void processEventAlarm(String devCode, String eventTypeCode, String logTime, String eventValue) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - //获取报警事件 - List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - - List busWellDTOList = dataGasMapper.getListByDevCode(devCode); - //若没绑定井,则不产生报警 - if (busWellDTOList != null && busWellDTOList.size() > 0) { - - for (int i = 0; i < jsonArray.size(); i++) { + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + //特殊处理消警 + if ("0".equals(eventValue)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, eventTypeCode); + } + return; } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> eventTypeCode.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 - if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + if (!alarmDeviceRuleResponseDTO.isPresent()) return; //1.查询是否已存在该类报警 - if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) return; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); - - + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + } + } + } + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + try { + String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmEventCode)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } } } } @@ -169,7 +205,76 @@ .rightVibrateAlarm(VibR) .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(uptime))) .logtime(new Date()) - .build());//存储采集数据 + .build()); + + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + ruleResponseDTOList.forEach(ruleResponseDTO -> { + + if ("Sloping".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Sloping)&&(!alarmRecordsService.isWatchAlarms(devCode,"Sloping"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Sloping", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Sloping)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Sloping"); + + } + } + if ("Destroy".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Destroy)&&(!alarmRecordsService.isWatchAlarms(devCode,"Destroy"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Destroy", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Destroy)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Destroy"); + + } + } + if ("Leak".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Leak)&&(!alarmRecordsService.isWatchAlarms(devCode,"Leak"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Leak", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Leak)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Leak"); + + } + } + if ("DiscL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscL)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscL"); + + } + } + if ("DiscR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscR)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscR"); + } + } + + if ("VibL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibL)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibL"); + } + } + if ("VibR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibR)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibR"); + } + } + }); + +// //处理报警事件 +// processEventAlarm(devCode,"Sloping",uptime,Sloping); +// processEventAlarm(devCode,"Destroy",uptime,Destroy); +// processEventAlarm(devCode,"Leak",uptime,Leak); +// processEventAlarm(devCode,"DiscL",uptime,DiscL); +// processEventAlarm(devCode,"DiscR",uptime,DiscR); +// processEventAlarm(devCode,"VibL",uptime,VibL); +// processEventAlarm(devCode,"VibR",uptime,VibR); + //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -197,7 +302,7 @@ if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && gas >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), gas)) { @@ -213,7 +318,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R,alarmFlag?"燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R, alarmFlag ? "燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java index f913775..895d201 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java @@ -89,6 +89,7 @@ String bfcf = busDeviceService.getBfcf(devCode); if (DictEnum.BF_ON.equals(bfcf)) { JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); //获取报警事件 List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); List busWellDTOList = dataGasMapper.getListByDevCode(devCode); @@ -96,25 +97,43 @@ if (busWellDTOList != null && busWellDTOList.size() > 0) { for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 if (!alarmDeviceRuleResponseDTO.isPresent()) continue; //1.查询是否已存在该类报警 if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { @@ -141,6 +160,9 @@ String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); gas = String.format("%.2f", Double.valueOf(gas)); //1.存数据 save(DataTubeOther.builder() @@ -156,6 +178,9 @@ .rsrp(rsrp) .sin(pci) .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) .build());//存储采集数据 //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -186,7 +211,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 98e736b..2288075 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -216,5 +216,15 @@ public ReturnDTO syncDeviceStatus() { return ReturnUtil.success(iBusDeviceService.syncDeviceStatus()); } + + @ApiOperation("根据闸井id获取设备信息") + @PostMapping("/getListByWellId") + @ResponseBody + public ReturnDTO getListByWellId(@RequestBody IdDTO idDTO) { + Assert.isFalse(ObjectUtil.isEmpty(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iBusDeviceService.getListByWellId(idDTO.getId())); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java index 72a2d84..d6d9743 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java @@ -85,6 +85,7 @@ return ReturnUtil.success(iBusLedgerService.detail(idDTO.getId())); } + /** * 同步三级部门 * diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java index 9e412d2..4316b56 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java @@ -1,22 +1,33 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.response.ErrorResponseData; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; +import com.casic.missiles.modular.device.dto.BusPositionImportDTO; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.ReturnUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataAccessException; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; /** @@ -40,8 +51,44 @@ @PostMapping("/addPosition") @ResponseBody public ReturnDTO addPosition(@RequestBody BusLedgerPipe busLedgerPipe) { + + List busLedgerPipeList = iBusLedgerPipeService.getListByNumber(busLedgerPipe.getTagNumber()); + if(busLedgerPipeList!=null&&busLedgerPipeList.size()>0){ + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE,"安装位号已存!!!"); + } + Long id =IdUtil.getSnowflake(1,2).nextId(); + busLedgerPipe.setId(id); iBusLedgerPipeService.save(busLedgerPipe); - return ReturnUtil.success(busLedgerPipe.getId()); + return ReturnUtil.success(id); + } + + @ApiOperation("批量导入") + @RequestMapping(value = "/batchImport", method = RequestMethod.POST) + @ResponseBody + public Object batchImport(@RequestParam("file") MultipartFile file) { + List results = new ArrayList<>(); + try { + results = this.importExcel(BusPositionImportDTO.class, file, null, null); + List list = iBusLedgerPipeService.addPositionBatch(results); + if (!CollectionUtil.isEmpty(list)) { + //获取校验报错信息 + return new ErrorResponseData(list.get(0)); + } + } catch (Exception e) { + return catchMybatisPlusException(e, "导入位置信息失败"); + } + return ResponseData.success(); + } + + private ResponseData catchMybatisPlusException(Exception e, String errorMsg) { + if (e instanceof DataAccessException) { + DataAccessException mybatisPlusException = (DataAccessException) e; + String message = mybatisPlusException.getRootCause().getMessage(); + if (message.contains("Duplicate entry '")) { + return new ErrorResponseData("安装位号重复:" + message.replaceAll("Duplicate entry '", "").replaceAll("' for key 'DEVCODE'", "")); + } + } + return new ErrorResponseData(errorMsg); } @ApiOperation("编辑点位") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java index d1e08a8..d938876 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java @@ -51,6 +51,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getOperatorName()), "CREATE_USER", request.getOperatorName()); queryWrapper.ge(ObjectUtil.isNotEmpty(request.getStartTime()), "START_TIME", request.getStartTime()); queryWrapper.le(ObjectUtil.isNotEmpty(request.getEndTime()), "END_TIME", request.getEndTime()); + queryWrapper.orderByDesc("START_TIME"); return ReturnUtil.success(super.packForBT(iSyncLogService.page(page, queryWrapper))); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java index 5ee5291..23ddee9 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java @@ -73,4 +73,12 @@ " where bd.DEVCODE= #{devcode} and bd.VALID=1 " + ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD asc") List getDeviceTypeRule(@Param("devcode") String devcode); + + + @Select("SELECT bd.* from bus_device bd " + + "left JOIN bus_device_ledger bl on bd.id= bl.DEVICE_ID and bl.VALID=1 " + + "LEFT JOIN bus_ledger_all_view bv on bv.id= bl.LEDGER_ID and bv.type= bl.TYPE and bv.VALID=1 " + + "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") + List getListByWellId(@Param("wellId") Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java index e1d16c4..a4c3f7a 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java @@ -37,7 +37,7 @@ @Select("SELECT b.ORG_ID,b.ORG_CODE,b.ORG_NAME,b.PARENT_ID FROM `bus_sync_org_relation` b WHERE b.DEL_FLAG =0 and b.PARENT_ID = #{syncId} ") List synDept(@Param("syncId") String syncId); - @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view ") + @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view where VALID=1") List getBusLedgers(); @Select("SELECT DEVCODE FROM `bus_device` where VALID>0 ") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml index 99ef10b..c6d1fff 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml @@ -29,6 +29,7 @@ bp.DEVICE_MODEL as deviceModel, bt.TYPE_NAME as typeName, + bp.DATA_SERVICE as deviceCategory, bm.`NAME` as manufactureName, bl.tagNumber as tagNumber, bl.id as ledgerId, @@ -81,6 +82,10 @@ and bd.LOGTIME #{request.logTime2} + + and bp.DATA_SERVICE =#{request.deviceCategory} + + ORDER BY bd.INSTALL_DATE DESC diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml index bdadb6a..d3f4684 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml @@ -40,7 +40,7 @@ `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + AND bdl.VALID = 1 JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -99,8 +99,8 @@ bm.`NAME` as manufactureName FROM `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE - LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID and bdl.type=blp.type + AND bdl.VALID = 1 LEFT JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -117,7 +117,9 @@ WITH station_temp as(SELECT bl.ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID FROM `bus_ledger` bl where bl.VALID=1 and bl.TYPE =2) - select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME from station_temp bl + select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME,bd.DEVCODE from station_temp bl left join bus_device_ledger bdl on bdl.LEDGER_ID = bl.ID and bdl.TYPE =2 and bdl.valid=1 left join bus_device bd on bd.id= bdl.DEVICE_ID and bd.VALID=1 order by bl.ID diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml index 7b92b04..1d97c64 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml @@ -184,7 +184,7 @@ WHERE EQ_LOCNO like 'N%' and - EQ_CATEGORY in (1,3) + EQ_CATEGORY in (1,2,3,5) diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java index 859cf08..143b42d 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java @@ -23,6 +23,9 @@ @ApiModelProperty("设备类型id") private Long typeId; + @ApiModelProperty("产品名称") + private String productName; + @ApiModelProperty("指令集合") private List commandConfigList; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java index 646610b..2cb5894 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("最新上传结束时间") private String logTime2; + + @ApiModelProperty("设备类别(0:自有设备,1:数据服务)") + private String deviceCategory; } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java index 8c95537..28b30fa 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java @@ -44,6 +44,9 @@ @ExcelProperty("关联管线") private String pipeCode; + @ExcelProperty("监测类型") + private String monitorType; + private String watchObject; private Long deviceType; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java index 0980c34..ac5daf0 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java @@ -24,4 +24,7 @@ @ApiModelProperty("详细位置") private String position; + @ApiModelProperty("1:其他,3:管线") + private String type; + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java new file mode 100644 index 0000000..bce7ebd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.device.dto; + + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class BusPositionImportDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + + @ExcelProperty("管线编号") + private String pipeCode; + + @ExcelProperty("安装位号") + private String tagNumber; + + @ExcelProperty("经度(高德)") + private String lngGaode; + + @ExcelProperty("纬度(高德)") + private String latGaode; + + @ExcelProperty("详细位置") + private String position; + + @ExcelProperty("管理单位") + private Long deptid; + + @ExcelProperty("位置类别") + private String type; + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java index 58faa0e..d72ae78 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java @@ -16,13 +16,13 @@ private String deviceId; //移动命令:left right up down left_up left_down right_up right_down GOTO_PRESET - @ApiModelProperty("移动命令") + @ApiModelProperty("移动命令(left right up down left_up left_down right_up right_down)") private String command; - @ApiModelProperty("速度") + @ApiModelProperty("速度,一般传100") private String speed; - @ApiModelProperty("启停命令") + @ApiModelProperty("启停命令(0:开始,1:结束)") private String cameraAction; @ApiModelProperty("预置点编号") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java index b4ec73c..5a3d0b0 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java @@ -66,7 +66,7 @@ private String powerSupplyMode; - @ApiModelProperty("是否结束数据服务") + @ApiModelProperty("是否结束数据服务(1:是,0:否)") @TableField("DATA_SERVICE") private String dataService; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java index 1184995..407e3c1 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java @@ -193,10 +193,14 @@ @TableField(exist = false) private String bfztName; + @ApiModelProperty("设备类别(0:自有设备,1:数据服务)") + @TableField(exist = false) + private String deviceCategory; + public BusDevice() { } - public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds) { + public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds, String monitorType) { this.devcode = devcode; this.deviceType = deviceType; this.productId = productId; @@ -204,6 +208,7 @@ this.installDate = installDate; this.watchObject = watchObject; this.ledgerIds = ledgerIds; + this.monitorType = monitorType; } public static List convertDeviceList(List dtoList) { @@ -227,7 +232,8 @@ deviceImportDTO.getValid(), deviceImportDTO.getInstallDate(), deviceImportDTO.getWatchObject(), - deviceImportDTO.getLedgerIds())); + deviceImportDTO.getLedgerIds(), + deviceImportDTO.getMonitorType())); }); return busDeviceList; } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java index 12b52de..1ac8455 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java @@ -1,16 +1,20 @@ package com.casic.missiles.modular.device.entity; +import cn.hutool.core.util.IdUtil; 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 com.casic.missiles.modular.device.dto.BusPositionImportDTO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import java.io.Serializable; +import java.util.ArrayList; import java.util.Date; +import java.util.List; /** *

@@ -29,7 +33,7 @@ private static final long serialVersionUID = 1L; @ApiModelProperty("主键") - @TableId(value = "ID", type = IdType.AUTO) +// @TableId(value = "ID", type = IdType.AUTO) private Long id; @ApiModelProperty("编号") @@ -60,6 +64,10 @@ @TableField("DEPTID") private Long deptid; + @ApiModelProperty("类别(1:其他,3:管线)") + @TableField("`TYPE`") + private String type; + @ApiModelProperty("责任部门") @TableField("RESPONSIBLE_DEPT") private Long responsibleDept; @@ -110,9 +118,10 @@ public BusLedgerPipe() { } - public BusLedgerPipe(String pipeCode, String ledgerName, String tagNumber, + public BusLedgerPipe(Long id,String pipeCode, String ledgerName, String tagNumber, String lngGaode, String latGaode, String position, - Long deptid, String devcode) { + Long deptid, String devcode, String type) { + this.id=id; this.pipeCode = pipeCode; this.ledgerName = ledgerName; this.tagNumber = tagNumber; @@ -121,5 +130,26 @@ this.position = position; this.deptid = deptid; this.devcode = devcode; + this.type = type; } + + public static List convertDeviceList(List dtoList) { + + + List busDeviceList = new ArrayList<>(); + dtoList.forEach(positionImportDTO -> { + + busDeviceList.add(new BusLedgerPipe(IdUtil.getSnowflake(1,2).nextId(),positionImportDTO.getPipeCode(), + positionImportDTO.getTagNumber(), + positionImportDTO.getTagNumber(), + positionImportDTO.getLngGaode(), + positionImportDTO.getLatGaode(), + positionImportDTO.getPosition(), + positionImportDTO.getDeptid(), + "", + positionImportDTO.getType())); + }); + return busDeviceList; + } + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java index aaaa409..63c0576 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java @@ -52,4 +52,8 @@ List getDeviceRule(String devcode); + List getDevicesByCodes(List devcodes); + + List getListByWellId(Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java index 14f6a93..8692383 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java @@ -2,11 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; -import com.casic.missiles.core.datascope.DataScope; -import com.casic.missiles.modular.device.dto.BusLedgerPipeMonitorRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeResponseDTO; -import com.casic.missiles.modular.device.dto.MonitorDataRequestDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import java.util.List; @@ -26,17 +22,21 @@ Page monitorPipePageList(Page page, BusLedgerPipeMonitorRequestDTO request); - BusLedgerPipeResponseDTO detail(Long id,String devcode); + BusLedgerPipeResponseDTO detail(Long id, String devcode); - List> watchDataByPipe(MonitorDataRequestDTO requestDTO); + List> watchDataByPipe(MonitorDataRequestDTO requestDTO); - List> pipeList(); + List> pipeList(); - List> deviceList(); + List> deviceList(); BusLedgerPipe saveBusLedgerPipe(BusLedgerPipe busLedgerPipe); Boolean updateMonitorStatus(List tagNumbers); + List addPositionBatch(List results); + + List getListByNumber(String tagNumber); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java index 66ed812..ad72230 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java @@ -12,9 +12,12 @@ import com.casic.missiles.modular.device.dto.BusConfigOtherDTO; import com.casic.missiles.modular.device.dto.BusConfigRequestDTO; import com.casic.missiles.modular.device.entity.BusConfig; +import com.casic.missiles.modular.device.entity.BusDevice; import com.casic.missiles.modular.device.service.IBusConfigService; +import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.HttpClientUtils; import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -22,6 +25,9 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.LinkedBlockingDeque; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; /** *

@@ -36,6 +42,11 @@ public class BusConfigServiceImpl extends ServiceImpl implements IBusConfigService { private final AbstractPermissionContext abstractPermissionContext; + private final IBusDeviceService iBusDeviceService; + private final ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(3, 6, 60, TimeUnit.SECONDS, new LinkedBlockingDeque<>(10)); + + @Value("${casic.brSendConfigUrl}") + private String brSendConfigUrl; @Transactional @Override @@ -105,6 +116,42 @@ .operator(user != null ? user.getId() : null) .operatorName(user != null ? user.getName() : "").build()); }); + + + threadPoolExecutor.execute( + () -> { + //发送第三方下发: + if (busConfigOtherDTO.getProductName().contains("管网哨兵")) { + List busDeviceList = iBusDeviceService.getDevicesByCodes(devcodes); + for (BusDevice busDevice : busDeviceList) { + if (ObjectUtil.isAllNotEmpty(busDevice.getNbProductId(), busDevice.getNbDeviceId())) { + Map commandMap = new HashMap<>(); + commandMap.put("productId", busDevice.getNbProductId()); + commandMap.put("devCode", busDevice.getDevcode()); + commandMap.put("deviceId", busDevice.getNbDeviceId()); + commandMap.put("cmdList", busConfigOtherDTO.getCommandConfigList()); + HttpClientUtils.post(brSendConfigUrl+"/tube/config/send", JSON.toJSONString(commandMap)); + } + } + } else if (busConfigOtherDTO.getProductName().contains("智能警示桩")) { + + List busDeviceList = iBusDeviceService.getDevicesByCodes(devcodes); + for (BusDevice busDevice : busDeviceList) { + if (ObjectUtil.isAllNotEmpty(busDevice.getNbProductId(), busDevice.getNbDeviceId())) { + Map commandMap = new HashMap<>(); + commandMap.put("productId", busDevice.getNbProductId()); + commandMap.put("devCode", busDevice.getDevcode()); + commandMap.put("deviceId", busDevice.getNbDeviceId()); + commandMap.put("cmdList", busConfigOtherDTO.getCommandConfigList()); + HttpClientUtils.post(brSendConfigUrl+"/sentinel/config/send", JSON.toJSONString(commandMap)); + } + } + + } + } + ); + + return this.saveBatch(busConfigs); // List> mapList = new ArrayList<>(); // Map commandMap = new HashMap<>(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java index 60d15e5..bae6902 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java @@ -3,6 +3,7 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -80,6 +81,7 @@ @Override public Page listPage(Page page, BusDeviceDTO request) { + page.setOptimizeCountSql(false); Page busDevicePage = this.baseMapper.pageList(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List busDeviceList = busDevicePage.getRecords(); busDeviceList.forEach(busDevice -> { @@ -227,7 +229,7 @@ if (deviceDataEnum.getTableColumns().contains("cell")) { String[] queryColumns = deviceDataEnum.getQueryColumns().split(",", 4); resultMap = this.baseMapper.cellAnalysis(deviceDataEnum.getTableName(), - "cell,uptime", + deviceDataEnum.getCellColumn(), queryColumns[0], queryColumns[1], deviceDataEnum.getOrderColumn(), @@ -265,14 +267,13 @@ } else { List busDeviceLedgers = busDeviceLedgerService.getListByDeviceId(busDevice.getId()); //没绑定关系,先绑定 - if (ObjectUtil.isNotEmpty(busDeviceLedgers)) { + if (busDeviceLedgers == null || busDeviceLedgers.size() < 1) { busDeviceLedgerService.saveDeviceLedger(busDevice.getId(), busDevice.getLedgerIds(), busDevice.getWatchObject()); } else { //已绑定,判断是否位置变了 List ledgerIdsPre = busDeviceLedgers.stream().map(BusDeviceLedger::getLedgerId).collect(Collectors.toList()); if (ledgerIds.containsAll(ledgerIdsPre) && ledgerIdsPre.containsAll(ledgerIds)) { } else { - busDeviceLedgerService.deleteDeviceLedgers(Arrays.asList(busDevice.getId())); busDeviceLedgerService.saveDeviceLedger(busDevice.getId(), busDevice.getLedgerIds(), busDevice.getWatchObject()); } } @@ -304,6 +305,8 @@ List codeList = iBusLedgerService.getCodeLists(); //获取管线编号 List pipeCodeList = iBusLedgerService.getPipeCodeList(); + List pipeList = new ArrayList<>(); + final Integer[] index = {1}; results.forEach(deviceImportDTO -> { index[0]++; @@ -357,22 +360,16 @@ return; } //新增点位 - if ("3".equals(deviceImportDTO.getWatchObject())) { + if ("3".equals(deviceImportDTO.getWatchObject()) || "1".equals(deviceImportDTO.getWatchObject())) { //toDo:安装位号一致,入一次即可 //为管线 - BusLedgerPipe busLedgerPipe = new BusLedgerPipe(deviceImportDTO.getPipeCode(), deviceImportDTO.getTagNumber(), + Long pipeLedgerId = IdUtil.getSnowflake(1, 2).nextId(); + BusLedgerPipe busLedgerPipe = new BusLedgerPipe(pipeLedgerId, deviceImportDTO.getPipeCode(), deviceImportDTO.getTagNumber(), deviceImportDTO.getTagNumber(), deviceImportDTO.getLng(), deviceImportDTO.getLat(), - deviceImportDTO.getPosition(), deviceImportDTO.getDeptid(), deviceImportDTO.getDevCode()); - busLedgerPipe = iBusLedgerPipeService.saveBusLedgerPipe(busLedgerPipe); - deviceImportDTO.setLedgerIds(Arrays.asList(busLedgerPipe.getId())); - }else if("1".equals(deviceImportDTO.getWatchObject())){ - //新增闸井 - BusLedger busLedger = new BusLedger(deviceImportDTO.getTagNumber(), - deviceImportDTO.getTagNumber(),deviceImportDTO.getTagNumber(), - deviceImportDTO.getLng(),deviceImportDTO.getLat(),deviceImportDTO.getPosition(), - deviceImportDTO.getDeptid()); - this.iBusLedgerService.save(busLedger); - deviceImportDTO.setLedgerIds(Arrays.asList(busLedger.getId())); + deviceImportDTO.getPosition(), deviceImportDTO.getDeptid(), deviceImportDTO.getDevCode(), deviceImportDTO.getWatchObject()); +// busLedgerPipe = iBusLedgerPipeService.saveBusLedgerPipe(busLedgerPipe); + pipeList.add(busLedgerPipe); + deviceImportDTO.setLedgerIds(Arrays.asList(pipeLedgerId)); } } @@ -383,6 +380,10 @@ return list; } + if (pipeList != null && pipeList.size() > 0) { + iBusLedgerPipeService.saveBatch(pipeList); + } + List busDeviceList = BusDevice.convertDeviceList(results); //保存设备信息 @@ -514,7 +515,7 @@ } -// @Cacheable(value = "alarmRuleCache", key = "#devcode") + // @Cacheable(value = "alarmRuleCache", key = "#devcode") @Override public List getDeviceRule(String devcode) { List alarmRuleValueList = this.baseMapper.getSpecialDeviceRule(devcode); @@ -523,4 +524,18 @@ } return alarmRuleValueList; } + + + @Override + public List getDevicesByCodes(List devcodes) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("DEVCODE", devcodes); + queryWrapper.eq("VALID", "1"); + return this.baseMapper.selectList(queryWrapper); + } + + @Override + public List getListByWellId(Long wellId) { + return this.baseMapper.getListByWellId(wellId); + } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java new file mode 100644 index 0000000..fc881a1 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.data.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 外协管盯 前端控制器 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RestController +@RequestMapping("/system/dataGasOther") +public class DataGasOtherController { + +} + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java new file mode 100644 index 0000000..b5f3627 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.data.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 外协管盯 Mapper 接口 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Mapper +public interface DataGasOtherMapper extends BaseMapper { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml new file mode 100644 index 0000000..8ce1455 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID, DEVCODE, WELL_CODE, WELL_NUMBER, GASVAL, VBAT, BATSTA, SIN, RSRP, SINR, UPTIME, LOGTIME, SIG, TEMP, SS_STATE + + + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java new file mode 100644 index 0000000..53972ba --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java @@ -0,0 +1,94 @@ +package com.casic.missiles.modular.data.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 外协管盯 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Builder +@Data +@TableName("data_gas_other") +@ApiModel(value = "DataGasOther对象", description = "外协管盯") +public class DataGasOther implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId("ID") + private Long id; + + @ApiModelProperty("设备编号") + @TableField("DEVCODE") + private String devcode; + + @ApiModelProperty("点位编号") + @TableField("WELL_CODE") + private String wellCode; + + @ApiModelProperty("位号") + @TableField("WELL_NUMBER") + private String wellNumber; + + @ApiModelProperty("气体浓度采样值") + @TableField("GASVAL") + private String gasval; + + @ApiModelProperty("设备电池电压值(毫伏)") + @TableField("VBAT") + private String vbat; + + @ApiModelProperty("电池状态0 正常、 1 低电告警、2 关机") + @TableField("BATSTA") + private String batsta; + + @ApiModelProperty("接收信号强度等级") + @TableField("SIN") + private String sin; + + @ApiModelProperty("接收信号参考质量 服务小 区的 RSRP 值") + @TableField("RSRP") + private String rsrp; + + @ApiModelProperty("信噪比") + @TableField("SINR") + private String sinr; + + @ApiModelProperty("采集时间") + @TableField("UPTIME") + private Date uptime; + + @ApiModelProperty("上传时间") + @TableField("LOGTIME") + private Date logtime; + + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态,0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java index 86077b8..f4d4417 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java @@ -76,4 +76,17 @@ private Date logtime; + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态:0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java new file mode 100644 index 0000000..842ca0b --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.data.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.data.entity.DataGasOther; + +/** + *

+ * 外协管盯 服务类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +public interface IDataGasOtherService extends IService { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java new file mode 100644 index 0000000..4c660e9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java @@ -0,0 +1,226 @@ +package com.casic.missiles.modular.data.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.enums.DeviceTypeEnum; +import com.casic.missiles.enums.DictEnum; +import com.casic.missiles.modular.alarm.dto.AlarmDeviceRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.AlarmRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.BusAlarmLedgerDTO; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.data.dao.DataGasMapper; +import com.casic.missiles.modular.data.dao.DataGasOtherMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import com.casic.missiles.modular.data.entity.DataTubeOther; +import com.casic.missiles.modular.data.service.IDataAbstractService; +import com.casic.missiles.modular.data.service.IDataGasOtherService; +import com.casic.missiles.modular.data.service.ITrackLogService; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Optional; + +/** + *

+ * 外协管盯 服务实现类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RequiredArgsConstructor +@Service +public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { + + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + private final DataGasMapper dataGasMapper; + private final IAlarmRecordsService alarmRecordsService; + private final IAlarmRuleService alarmRuleService; + private final ITrackLogService iTrackLogService; + private final IBusDeviceService busDeviceService; + + @Override + public void process(String dataContent) { + + //解析数据+根据业务处理存储数据 + JSONObject json = JSONObject.parseObject(dataContent); + String devCode = json.get("devCode").toString(); + JSONObject jsonObject = json.getJSONObject("mBody"); + if (mType[0].equals(json.get("mType")) || mType[3].equals(json.get("mType"))) {//存储上报数据 + this.processNormalData(jsonObject, devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + this.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.TubeOther.name().equals(json.get("devType"))) { + if ("TubeOtherConfigSuccess".equals(jsonObject.get("bType"))) { +// deviceConfigManager.updateStatus(devCode); + } + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } else if (mType[4].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); +// imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; + try { + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); + } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + } + } + + @Transactional + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.getString("cell"); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = jsonObject.getJSONArray("datas"); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + String bfcf = busDeviceService.getBfcf(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).getString("gasval"); + String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); + String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); + String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataGasOther.builder() + .wellCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .wellNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .devcode(devCode) +// .cell(cell) + .gasval(gas) + .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime))) + .logtime(new Date()) + .vbat(vbat) + .batsta(batsta) + .rsrp(rsrp) + .sin(pci) + .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) + .build());//存储采集数据 + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) continue; + + //3.清除设备告警 + alarmRecordsService.cancelDeviceAlarm(devCode); + //4.存报警 + //若没绑定井,则不产生报警 + boolean alarmFlag = false; + if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { + //获取报警规则 + List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); + for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { + if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && + Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { + alarmFlag = true; + //写入报警 + //1、判断报警是否已存在 + if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.TubeOther.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); + //7.更新管线状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java index d248540..b33a1ee 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java @@ -91,7 +91,6 @@ } - public List getBusAlarmLedgerList(String devCode) { return this.dataGasMapper.getListByDevCode(devCode); } @@ -113,6 +112,13 @@ for (int i = 0; i < jsonArray.size(); i++) { try { String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) .findFirst(); @@ -175,18 +181,18 @@ alarmRecordsService.cancelDeviceAlarm(devCode); //4.存报警 //若没绑定井,则不产生报警 - boolean alarmFlag = false; + boolean alarmFlag = false; if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { //获取报警规则 List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { - alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); } break; } @@ -197,7 +203,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及设备状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新监测井状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java index e848fce..6297093 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java @@ -84,42 +84,78 @@ } - @Transactional - public void processAlarmData(JSONObject jsonObject, String devCode) { - JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + public void processEventAlarm(String devCode, String eventTypeCode, String logTime, String eventValue) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - //获取报警事件 - List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - - List busWellDTOList = dataGasMapper.getListByDevCode(devCode); - //若没绑定井,则不产生报警 - if (busWellDTOList != null && busWellDTOList.size() > 0) { - - for (int i = 0; i < jsonArray.size(); i++) { + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + //特殊处理消警 + if ("0".equals(eventValue)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, eventTypeCode); + } + return; } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> eventTypeCode.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 - if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + if (!alarmDeviceRuleResponseDTO.isPresent()) return; //1.查询是否已存在该类报警 - if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) return; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); - - + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + } + } + } + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + try { + String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmEventCode)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } } } } @@ -169,7 +205,76 @@ .rightVibrateAlarm(VibR) .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(uptime))) .logtime(new Date()) - .build());//存储采集数据 + .build()); + + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + ruleResponseDTOList.forEach(ruleResponseDTO -> { + + if ("Sloping".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Sloping)&&(!alarmRecordsService.isWatchAlarms(devCode,"Sloping"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Sloping", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Sloping)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Sloping"); + + } + } + if ("Destroy".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Destroy)&&(!alarmRecordsService.isWatchAlarms(devCode,"Destroy"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Destroy", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Destroy)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Destroy"); + + } + } + if ("Leak".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Leak)&&(!alarmRecordsService.isWatchAlarms(devCode,"Leak"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Leak", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Leak)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Leak"); + + } + } + if ("DiscL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscL)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscL"); + + } + } + if ("DiscR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscR)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscR"); + } + } + + if ("VibL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibL)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibL"); + } + } + if ("VibR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibR)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibR"); + } + } + }); + +// //处理报警事件 +// processEventAlarm(devCode,"Sloping",uptime,Sloping); +// processEventAlarm(devCode,"Destroy",uptime,Destroy); +// processEventAlarm(devCode,"Leak",uptime,Leak); +// processEventAlarm(devCode,"DiscL",uptime,DiscL); +// processEventAlarm(devCode,"DiscR",uptime,DiscR); +// processEventAlarm(devCode,"VibL",uptime,VibL); +// processEventAlarm(devCode,"VibR",uptime,VibR); + //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -197,7 +302,7 @@ if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && gas >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), gas)) { @@ -213,7 +318,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R,alarmFlag?"燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R, alarmFlag ? "燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java index f913775..895d201 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java @@ -89,6 +89,7 @@ String bfcf = busDeviceService.getBfcf(devCode); if (DictEnum.BF_ON.equals(bfcf)) { JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); //获取报警事件 List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); List busWellDTOList = dataGasMapper.getListByDevCode(devCode); @@ -96,25 +97,43 @@ if (busWellDTOList != null && busWellDTOList.size() > 0) { for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 if (!alarmDeviceRuleResponseDTO.isPresent()) continue; //1.查询是否已存在该类报警 if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { @@ -141,6 +160,9 @@ String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); gas = String.format("%.2f", Double.valueOf(gas)); //1.存数据 save(DataTubeOther.builder() @@ -156,6 +178,9 @@ .rsrp(rsrp) .sin(pci) .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) .build());//存储采集数据 //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -186,7 +211,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 98e736b..2288075 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -216,5 +216,15 @@ public ReturnDTO syncDeviceStatus() { return ReturnUtil.success(iBusDeviceService.syncDeviceStatus()); } + + @ApiOperation("根据闸井id获取设备信息") + @PostMapping("/getListByWellId") + @ResponseBody + public ReturnDTO getListByWellId(@RequestBody IdDTO idDTO) { + Assert.isFalse(ObjectUtil.isEmpty(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iBusDeviceService.getListByWellId(idDTO.getId())); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java index 72a2d84..d6d9743 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java @@ -85,6 +85,7 @@ return ReturnUtil.success(iBusLedgerService.detail(idDTO.getId())); } + /** * 同步三级部门 * diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java index 9e412d2..4316b56 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java @@ -1,22 +1,33 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.response.ErrorResponseData; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; +import com.casic.missiles.modular.device.dto.BusPositionImportDTO; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.ReturnUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataAccessException; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; /** @@ -40,8 +51,44 @@ @PostMapping("/addPosition") @ResponseBody public ReturnDTO addPosition(@RequestBody BusLedgerPipe busLedgerPipe) { + + List busLedgerPipeList = iBusLedgerPipeService.getListByNumber(busLedgerPipe.getTagNumber()); + if(busLedgerPipeList!=null&&busLedgerPipeList.size()>0){ + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE,"安装位号已存!!!"); + } + Long id =IdUtil.getSnowflake(1,2).nextId(); + busLedgerPipe.setId(id); iBusLedgerPipeService.save(busLedgerPipe); - return ReturnUtil.success(busLedgerPipe.getId()); + return ReturnUtil.success(id); + } + + @ApiOperation("批量导入") + @RequestMapping(value = "/batchImport", method = RequestMethod.POST) + @ResponseBody + public Object batchImport(@RequestParam("file") MultipartFile file) { + List results = new ArrayList<>(); + try { + results = this.importExcel(BusPositionImportDTO.class, file, null, null); + List list = iBusLedgerPipeService.addPositionBatch(results); + if (!CollectionUtil.isEmpty(list)) { + //获取校验报错信息 + return new ErrorResponseData(list.get(0)); + } + } catch (Exception e) { + return catchMybatisPlusException(e, "导入位置信息失败"); + } + return ResponseData.success(); + } + + private ResponseData catchMybatisPlusException(Exception e, String errorMsg) { + if (e instanceof DataAccessException) { + DataAccessException mybatisPlusException = (DataAccessException) e; + String message = mybatisPlusException.getRootCause().getMessage(); + if (message.contains("Duplicate entry '")) { + return new ErrorResponseData("安装位号重复:" + message.replaceAll("Duplicate entry '", "").replaceAll("' for key 'DEVCODE'", "")); + } + } + return new ErrorResponseData(errorMsg); } @ApiOperation("编辑点位") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java index d1e08a8..d938876 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java @@ -51,6 +51,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getOperatorName()), "CREATE_USER", request.getOperatorName()); queryWrapper.ge(ObjectUtil.isNotEmpty(request.getStartTime()), "START_TIME", request.getStartTime()); queryWrapper.le(ObjectUtil.isNotEmpty(request.getEndTime()), "END_TIME", request.getEndTime()); + queryWrapper.orderByDesc("START_TIME"); return ReturnUtil.success(super.packForBT(iSyncLogService.page(page, queryWrapper))); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java index 5ee5291..23ddee9 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java @@ -73,4 +73,12 @@ " where bd.DEVCODE= #{devcode} and bd.VALID=1 " + ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD asc") List getDeviceTypeRule(@Param("devcode") String devcode); + + + @Select("SELECT bd.* from bus_device bd " + + "left JOIN bus_device_ledger bl on bd.id= bl.DEVICE_ID and bl.VALID=1 " + + "LEFT JOIN bus_ledger_all_view bv on bv.id= bl.LEDGER_ID and bv.type= bl.TYPE and bv.VALID=1 " + + "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") + List getListByWellId(@Param("wellId") Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java index e1d16c4..a4c3f7a 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java @@ -37,7 +37,7 @@ @Select("SELECT b.ORG_ID,b.ORG_CODE,b.ORG_NAME,b.PARENT_ID FROM `bus_sync_org_relation` b WHERE b.DEL_FLAG =0 and b.PARENT_ID = #{syncId} ") List synDept(@Param("syncId") String syncId); - @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view ") + @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view where VALID=1") List getBusLedgers(); @Select("SELECT DEVCODE FROM `bus_device` where VALID>0 ") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml index 99ef10b..c6d1fff 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml @@ -29,6 +29,7 @@ bp.DEVICE_MODEL as deviceModel, bt.TYPE_NAME as typeName, + bp.DATA_SERVICE as deviceCategory, bm.`NAME` as manufactureName, bl.tagNumber as tagNumber, bl.id as ledgerId, @@ -81,6 +82,10 @@ and bd.LOGTIME #{request.logTime2} + + and bp.DATA_SERVICE =#{request.deviceCategory} + + ORDER BY bd.INSTALL_DATE DESC diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml index bdadb6a..d3f4684 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml @@ -40,7 +40,7 @@ `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + AND bdl.VALID = 1 JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -99,8 +99,8 @@ bm.`NAME` as manufactureName FROM `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE - LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID and bdl.type=blp.type + AND bdl.VALID = 1 LEFT JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -117,7 +117,9 @@ WITH station_temp as(SELECT bl.ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID FROM `bus_ledger` bl where bl.VALID=1 and bl.TYPE =2) - select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME from station_temp bl + select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME,bd.DEVCODE from station_temp bl left join bus_device_ledger bdl on bdl.LEDGER_ID = bl.ID and bdl.TYPE =2 and bdl.valid=1 left join bus_device bd on bd.id= bdl.DEVICE_ID and bd.VALID=1 order by bl.ID diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml index 7b92b04..1d97c64 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml @@ -184,7 +184,7 @@ WHERE EQ_LOCNO like 'N%' and - EQ_CATEGORY in (1,3) + EQ_CATEGORY in (1,2,3,5) diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java index 859cf08..143b42d 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java @@ -23,6 +23,9 @@ @ApiModelProperty("设备类型id") private Long typeId; + @ApiModelProperty("产品名称") + private String productName; + @ApiModelProperty("指令集合") private List commandConfigList; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java index 646610b..2cb5894 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("最新上传结束时间") private String logTime2; + + @ApiModelProperty("设备类别(0:自有设备,1:数据服务)") + private String deviceCategory; } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java index 8c95537..28b30fa 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java @@ -44,6 +44,9 @@ @ExcelProperty("关联管线") private String pipeCode; + @ExcelProperty("监测类型") + private String monitorType; + private String watchObject; private Long deviceType; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java index 0980c34..ac5daf0 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java @@ -24,4 +24,7 @@ @ApiModelProperty("详细位置") private String position; + @ApiModelProperty("1:其他,3:管线") + private String type; + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java new file mode 100644 index 0000000..bce7ebd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.device.dto; + + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class BusPositionImportDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + + @ExcelProperty("管线编号") + private String pipeCode; + + @ExcelProperty("安装位号") + private String tagNumber; + + @ExcelProperty("经度(高德)") + private String lngGaode; + + @ExcelProperty("纬度(高德)") + private String latGaode; + + @ExcelProperty("详细位置") + private String position; + + @ExcelProperty("管理单位") + private Long deptid; + + @ExcelProperty("位置类别") + private String type; + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java index 58faa0e..d72ae78 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java @@ -16,13 +16,13 @@ private String deviceId; //移动命令:left right up down left_up left_down right_up right_down GOTO_PRESET - @ApiModelProperty("移动命令") + @ApiModelProperty("移动命令(left right up down left_up left_down right_up right_down)") private String command; - @ApiModelProperty("速度") + @ApiModelProperty("速度,一般传100") private String speed; - @ApiModelProperty("启停命令") + @ApiModelProperty("启停命令(0:开始,1:结束)") private String cameraAction; @ApiModelProperty("预置点编号") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java index b4ec73c..5a3d0b0 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java @@ -66,7 +66,7 @@ private String powerSupplyMode; - @ApiModelProperty("是否结束数据服务") + @ApiModelProperty("是否结束数据服务(1:是,0:否)") @TableField("DATA_SERVICE") private String dataService; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java index 1184995..407e3c1 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java @@ -193,10 +193,14 @@ @TableField(exist = false) private String bfztName; + @ApiModelProperty("设备类别(0:自有设备,1:数据服务)") + @TableField(exist = false) + private String deviceCategory; + public BusDevice() { } - public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds) { + public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds, String monitorType) { this.devcode = devcode; this.deviceType = deviceType; this.productId = productId; @@ -204,6 +208,7 @@ this.installDate = installDate; this.watchObject = watchObject; this.ledgerIds = ledgerIds; + this.monitorType = monitorType; } public static List convertDeviceList(List dtoList) { @@ -227,7 +232,8 @@ deviceImportDTO.getValid(), deviceImportDTO.getInstallDate(), deviceImportDTO.getWatchObject(), - deviceImportDTO.getLedgerIds())); + deviceImportDTO.getLedgerIds(), + deviceImportDTO.getMonitorType())); }); return busDeviceList; } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java index 12b52de..1ac8455 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java @@ -1,16 +1,20 @@ package com.casic.missiles.modular.device.entity; +import cn.hutool.core.util.IdUtil; 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 com.casic.missiles.modular.device.dto.BusPositionImportDTO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import java.io.Serializable; +import java.util.ArrayList; import java.util.Date; +import java.util.List; /** *

@@ -29,7 +33,7 @@ private static final long serialVersionUID = 1L; @ApiModelProperty("主键") - @TableId(value = "ID", type = IdType.AUTO) +// @TableId(value = "ID", type = IdType.AUTO) private Long id; @ApiModelProperty("编号") @@ -60,6 +64,10 @@ @TableField("DEPTID") private Long deptid; + @ApiModelProperty("类别(1:其他,3:管线)") + @TableField("`TYPE`") + private String type; + @ApiModelProperty("责任部门") @TableField("RESPONSIBLE_DEPT") private Long responsibleDept; @@ -110,9 +118,10 @@ public BusLedgerPipe() { } - public BusLedgerPipe(String pipeCode, String ledgerName, String tagNumber, + public BusLedgerPipe(Long id,String pipeCode, String ledgerName, String tagNumber, String lngGaode, String latGaode, String position, - Long deptid, String devcode) { + Long deptid, String devcode, String type) { + this.id=id; this.pipeCode = pipeCode; this.ledgerName = ledgerName; this.tagNumber = tagNumber; @@ -121,5 +130,26 @@ this.position = position; this.deptid = deptid; this.devcode = devcode; + this.type = type; } + + public static List convertDeviceList(List dtoList) { + + + List busDeviceList = new ArrayList<>(); + dtoList.forEach(positionImportDTO -> { + + busDeviceList.add(new BusLedgerPipe(IdUtil.getSnowflake(1,2).nextId(),positionImportDTO.getPipeCode(), + positionImportDTO.getTagNumber(), + positionImportDTO.getTagNumber(), + positionImportDTO.getLngGaode(), + positionImportDTO.getLatGaode(), + positionImportDTO.getPosition(), + positionImportDTO.getDeptid(), + "", + positionImportDTO.getType())); + }); + return busDeviceList; + } + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java index aaaa409..63c0576 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java @@ -52,4 +52,8 @@ List getDeviceRule(String devcode); + List getDevicesByCodes(List devcodes); + + List getListByWellId(Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java index 14f6a93..8692383 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java @@ -2,11 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; -import com.casic.missiles.core.datascope.DataScope; -import com.casic.missiles.modular.device.dto.BusLedgerPipeMonitorRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeResponseDTO; -import com.casic.missiles.modular.device.dto.MonitorDataRequestDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import java.util.List; @@ -26,17 +22,21 @@ Page monitorPipePageList(Page page, BusLedgerPipeMonitorRequestDTO request); - BusLedgerPipeResponseDTO detail(Long id,String devcode); + BusLedgerPipeResponseDTO detail(Long id, String devcode); - List> watchDataByPipe(MonitorDataRequestDTO requestDTO); + List> watchDataByPipe(MonitorDataRequestDTO requestDTO); - List> pipeList(); + List> pipeList(); - List> deviceList(); + List> deviceList(); BusLedgerPipe saveBusLedgerPipe(BusLedgerPipe busLedgerPipe); Boolean updateMonitorStatus(List tagNumbers); + List addPositionBatch(List results); + + List getListByNumber(String tagNumber); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java index 66ed812..ad72230 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java @@ -12,9 +12,12 @@ import com.casic.missiles.modular.device.dto.BusConfigOtherDTO; import com.casic.missiles.modular.device.dto.BusConfigRequestDTO; import com.casic.missiles.modular.device.entity.BusConfig; +import com.casic.missiles.modular.device.entity.BusDevice; import com.casic.missiles.modular.device.service.IBusConfigService; +import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.HttpClientUtils; import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -22,6 +25,9 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.LinkedBlockingDeque; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; /** *

@@ -36,6 +42,11 @@ public class BusConfigServiceImpl extends ServiceImpl implements IBusConfigService { private final AbstractPermissionContext abstractPermissionContext; + private final IBusDeviceService iBusDeviceService; + private final ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(3, 6, 60, TimeUnit.SECONDS, new LinkedBlockingDeque<>(10)); + + @Value("${casic.brSendConfigUrl}") + private String brSendConfigUrl; @Transactional @Override @@ -105,6 +116,42 @@ .operator(user != null ? user.getId() : null) .operatorName(user != null ? user.getName() : "").build()); }); + + + threadPoolExecutor.execute( + () -> { + //发送第三方下发: + if (busConfigOtherDTO.getProductName().contains("管网哨兵")) { + List busDeviceList = iBusDeviceService.getDevicesByCodes(devcodes); + for (BusDevice busDevice : busDeviceList) { + if (ObjectUtil.isAllNotEmpty(busDevice.getNbProductId(), busDevice.getNbDeviceId())) { + Map commandMap = new HashMap<>(); + commandMap.put("productId", busDevice.getNbProductId()); + commandMap.put("devCode", busDevice.getDevcode()); + commandMap.put("deviceId", busDevice.getNbDeviceId()); + commandMap.put("cmdList", busConfigOtherDTO.getCommandConfigList()); + HttpClientUtils.post(brSendConfigUrl+"/tube/config/send", JSON.toJSONString(commandMap)); + } + } + } else if (busConfigOtherDTO.getProductName().contains("智能警示桩")) { + + List busDeviceList = iBusDeviceService.getDevicesByCodes(devcodes); + for (BusDevice busDevice : busDeviceList) { + if (ObjectUtil.isAllNotEmpty(busDevice.getNbProductId(), busDevice.getNbDeviceId())) { + Map commandMap = new HashMap<>(); + commandMap.put("productId", busDevice.getNbProductId()); + commandMap.put("devCode", busDevice.getDevcode()); + commandMap.put("deviceId", busDevice.getNbDeviceId()); + commandMap.put("cmdList", busConfigOtherDTO.getCommandConfigList()); + HttpClientUtils.post(brSendConfigUrl+"/sentinel/config/send", JSON.toJSONString(commandMap)); + } + } + + } + } + ); + + return this.saveBatch(busConfigs); // List> mapList = new ArrayList<>(); // Map commandMap = new HashMap<>(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java index 60d15e5..bae6902 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java @@ -3,6 +3,7 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -80,6 +81,7 @@ @Override public Page listPage(Page page, BusDeviceDTO request) { + page.setOptimizeCountSql(false); Page busDevicePage = this.baseMapper.pageList(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List busDeviceList = busDevicePage.getRecords(); busDeviceList.forEach(busDevice -> { @@ -227,7 +229,7 @@ if (deviceDataEnum.getTableColumns().contains("cell")) { String[] queryColumns = deviceDataEnum.getQueryColumns().split(",", 4); resultMap = this.baseMapper.cellAnalysis(deviceDataEnum.getTableName(), - "cell,uptime", + deviceDataEnum.getCellColumn(), queryColumns[0], queryColumns[1], deviceDataEnum.getOrderColumn(), @@ -265,14 +267,13 @@ } else { List busDeviceLedgers = busDeviceLedgerService.getListByDeviceId(busDevice.getId()); //没绑定关系,先绑定 - if (ObjectUtil.isNotEmpty(busDeviceLedgers)) { + if (busDeviceLedgers == null || busDeviceLedgers.size() < 1) { busDeviceLedgerService.saveDeviceLedger(busDevice.getId(), busDevice.getLedgerIds(), busDevice.getWatchObject()); } else { //已绑定,判断是否位置变了 List ledgerIdsPre = busDeviceLedgers.stream().map(BusDeviceLedger::getLedgerId).collect(Collectors.toList()); if (ledgerIds.containsAll(ledgerIdsPre) && ledgerIdsPre.containsAll(ledgerIds)) { } else { - busDeviceLedgerService.deleteDeviceLedgers(Arrays.asList(busDevice.getId())); busDeviceLedgerService.saveDeviceLedger(busDevice.getId(), busDevice.getLedgerIds(), busDevice.getWatchObject()); } } @@ -304,6 +305,8 @@ List codeList = iBusLedgerService.getCodeLists(); //获取管线编号 List pipeCodeList = iBusLedgerService.getPipeCodeList(); + List pipeList = new ArrayList<>(); + final Integer[] index = {1}; results.forEach(deviceImportDTO -> { index[0]++; @@ -357,22 +360,16 @@ return; } //新增点位 - if ("3".equals(deviceImportDTO.getWatchObject())) { + if ("3".equals(deviceImportDTO.getWatchObject()) || "1".equals(deviceImportDTO.getWatchObject())) { //toDo:安装位号一致,入一次即可 //为管线 - BusLedgerPipe busLedgerPipe = new BusLedgerPipe(deviceImportDTO.getPipeCode(), deviceImportDTO.getTagNumber(), + Long pipeLedgerId = IdUtil.getSnowflake(1, 2).nextId(); + BusLedgerPipe busLedgerPipe = new BusLedgerPipe(pipeLedgerId, deviceImportDTO.getPipeCode(), deviceImportDTO.getTagNumber(), deviceImportDTO.getTagNumber(), deviceImportDTO.getLng(), deviceImportDTO.getLat(), - deviceImportDTO.getPosition(), deviceImportDTO.getDeptid(), deviceImportDTO.getDevCode()); - busLedgerPipe = iBusLedgerPipeService.saveBusLedgerPipe(busLedgerPipe); - deviceImportDTO.setLedgerIds(Arrays.asList(busLedgerPipe.getId())); - }else if("1".equals(deviceImportDTO.getWatchObject())){ - //新增闸井 - BusLedger busLedger = new BusLedger(deviceImportDTO.getTagNumber(), - deviceImportDTO.getTagNumber(),deviceImportDTO.getTagNumber(), - deviceImportDTO.getLng(),deviceImportDTO.getLat(),deviceImportDTO.getPosition(), - deviceImportDTO.getDeptid()); - this.iBusLedgerService.save(busLedger); - deviceImportDTO.setLedgerIds(Arrays.asList(busLedger.getId())); + deviceImportDTO.getPosition(), deviceImportDTO.getDeptid(), deviceImportDTO.getDevCode(), deviceImportDTO.getWatchObject()); +// busLedgerPipe = iBusLedgerPipeService.saveBusLedgerPipe(busLedgerPipe); + pipeList.add(busLedgerPipe); + deviceImportDTO.setLedgerIds(Arrays.asList(pipeLedgerId)); } } @@ -383,6 +380,10 @@ return list; } + if (pipeList != null && pipeList.size() > 0) { + iBusLedgerPipeService.saveBatch(pipeList); + } + List busDeviceList = BusDevice.convertDeviceList(results); //保存设备信息 @@ -514,7 +515,7 @@ } -// @Cacheable(value = "alarmRuleCache", key = "#devcode") + // @Cacheable(value = "alarmRuleCache", key = "#devcode") @Override public List getDeviceRule(String devcode) { List alarmRuleValueList = this.baseMapper.getSpecialDeviceRule(devcode); @@ -523,4 +524,18 @@ } return alarmRuleValueList; } + + + @Override + public List getDevicesByCodes(List devcodes) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("DEVCODE", devcodes); + queryWrapper.eq("VALID", "1"); + return this.baseMapper.selectList(queryWrapper); + } + + @Override + public List getListByWellId(Long wellId) { + return this.baseMapper.getListByWellId(wellId); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java index 5073159..7f8bfdc 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service.impl; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -12,11 +13,8 @@ import com.casic.missiles.enums.DeviceDataEnum; import com.casic.missiles.modular.device.dao.BusDeviceMapper; import com.casic.missiles.modular.device.dao.BusLedgerPipeMapper; -import com.casic.missiles.modular.device.dto.BusLedgerPipeMonitorRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeResponseDTO; -import com.casic.missiles.modular.device.dto.MonitorDataRequestDTO; -import com.casic.missiles.modular.device.entity.BusLedgerPipe; +import com.casic.missiles.modular.device.dto.*; +import com.casic.missiles.modular.device.entity.*; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.server.CommonServer; @@ -24,11 +22,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.stream.Collectors; /** *

@@ -63,6 +60,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getPipeCode()), "PIPE_CODE", request.getPipeCode()); queryWrapper.like(ObjectUtil.isNotEmpty(request.getPosition()), "POSITION", request.getPosition()); queryWrapper.in(ObjectUtil.isNotEmpty(deptIds), "DEPTID", deptIds); + queryWrapper.eq(ObjectUtil.isNotEmpty(request.getType()), "TYPE", request.getType()); Page pipePage = this.page(page, queryWrapper); List pipeList = pipePage.getRecords(); pipeList.forEach(pipe -> { @@ -156,6 +154,12 @@ return busLedgerPipe; } + public List getList() { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("VALID", "1"); + return this.baseMapper.selectList(queryWrapper); + } + @Override public Boolean updateMonitorStatus(List tagNumbers) { UpdateWrapper updateWrapper = new UpdateWrapper<>(); @@ -163,4 +167,43 @@ updateWrapper.set("MONITOR_STATE", "3"); return this.update(updateWrapper); } + + @Transactional + @Override + public List addPositionBatch(List results) { + List list = new ArrayList<>(); + if (!CollectionUtil.isEmpty(results)) { + List busLedgerPipeList = this.getList(); + List tagCodes = busLedgerPipeList.stream().map(BusLedgerPipe::getTagNumber).collect(Collectors.toList()); + final Integer[] index = {1}; + results.forEach(busPositionImportDTO -> { + index[0]++; + //设备编号查重 + if (tagCodes.contains(busPositionImportDTO.getTagNumber())) { + list.add("第" + index[0] + "行,安装位号已存在!"); + return; + } + + }); + if (CollectionUtil.isNotEmpty(list)) { + return list; + } + List busDeviceList = BusLedgerPipe.convertDeviceList(results); + + //保存点位信息 + this.saveBatch(busDeviceList); + + } else { + list.add("导入数据不能为空"); + } + return list; + } + + @Override + public List getListByNumber(String tagNumber) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("VALID", "1"); + queryWrapper.eq("TAG_NUMBER", tagNumber); + return this.baseMapper.selectList(queryWrapper); + } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java new file mode 100644 index 0000000..fc881a1 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.data.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 外协管盯 前端控制器 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RestController +@RequestMapping("/system/dataGasOther") +public class DataGasOtherController { + +} + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java new file mode 100644 index 0000000..b5f3627 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.data.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 外协管盯 Mapper 接口 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Mapper +public interface DataGasOtherMapper extends BaseMapper { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml new file mode 100644 index 0000000..8ce1455 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID, DEVCODE, WELL_CODE, WELL_NUMBER, GASVAL, VBAT, BATSTA, SIN, RSRP, SINR, UPTIME, LOGTIME, SIG, TEMP, SS_STATE + + + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java new file mode 100644 index 0000000..53972ba --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java @@ -0,0 +1,94 @@ +package com.casic.missiles.modular.data.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 外协管盯 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Builder +@Data +@TableName("data_gas_other") +@ApiModel(value = "DataGasOther对象", description = "外协管盯") +public class DataGasOther implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId("ID") + private Long id; + + @ApiModelProperty("设备编号") + @TableField("DEVCODE") + private String devcode; + + @ApiModelProperty("点位编号") + @TableField("WELL_CODE") + private String wellCode; + + @ApiModelProperty("位号") + @TableField("WELL_NUMBER") + private String wellNumber; + + @ApiModelProperty("气体浓度采样值") + @TableField("GASVAL") + private String gasval; + + @ApiModelProperty("设备电池电压值(毫伏)") + @TableField("VBAT") + private String vbat; + + @ApiModelProperty("电池状态0 正常、 1 低电告警、2 关机") + @TableField("BATSTA") + private String batsta; + + @ApiModelProperty("接收信号强度等级") + @TableField("SIN") + private String sin; + + @ApiModelProperty("接收信号参考质量 服务小 区的 RSRP 值") + @TableField("RSRP") + private String rsrp; + + @ApiModelProperty("信噪比") + @TableField("SINR") + private String sinr; + + @ApiModelProperty("采集时间") + @TableField("UPTIME") + private Date uptime; + + @ApiModelProperty("上传时间") + @TableField("LOGTIME") + private Date logtime; + + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态,0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java index 86077b8..f4d4417 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java @@ -76,4 +76,17 @@ private Date logtime; + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态:0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java new file mode 100644 index 0000000..842ca0b --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.data.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.data.entity.DataGasOther; + +/** + *

+ * 外协管盯 服务类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +public interface IDataGasOtherService extends IService { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java new file mode 100644 index 0000000..4c660e9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java @@ -0,0 +1,226 @@ +package com.casic.missiles.modular.data.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.enums.DeviceTypeEnum; +import com.casic.missiles.enums.DictEnum; +import com.casic.missiles.modular.alarm.dto.AlarmDeviceRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.AlarmRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.BusAlarmLedgerDTO; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.data.dao.DataGasMapper; +import com.casic.missiles.modular.data.dao.DataGasOtherMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import com.casic.missiles.modular.data.entity.DataTubeOther; +import com.casic.missiles.modular.data.service.IDataAbstractService; +import com.casic.missiles.modular.data.service.IDataGasOtherService; +import com.casic.missiles.modular.data.service.ITrackLogService; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Optional; + +/** + *

+ * 外协管盯 服务实现类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RequiredArgsConstructor +@Service +public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { + + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + private final DataGasMapper dataGasMapper; + private final IAlarmRecordsService alarmRecordsService; + private final IAlarmRuleService alarmRuleService; + private final ITrackLogService iTrackLogService; + private final IBusDeviceService busDeviceService; + + @Override + public void process(String dataContent) { + + //解析数据+根据业务处理存储数据 + JSONObject json = JSONObject.parseObject(dataContent); + String devCode = json.get("devCode").toString(); + JSONObject jsonObject = json.getJSONObject("mBody"); + if (mType[0].equals(json.get("mType")) || mType[3].equals(json.get("mType"))) {//存储上报数据 + this.processNormalData(jsonObject, devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + this.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.TubeOther.name().equals(json.get("devType"))) { + if ("TubeOtherConfigSuccess".equals(jsonObject.get("bType"))) { +// deviceConfigManager.updateStatus(devCode); + } + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } else if (mType[4].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); +// imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; + try { + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); + } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + } + } + + @Transactional + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.getString("cell"); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = jsonObject.getJSONArray("datas"); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + String bfcf = busDeviceService.getBfcf(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).getString("gasval"); + String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); + String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); + String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataGasOther.builder() + .wellCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .wellNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .devcode(devCode) +// .cell(cell) + .gasval(gas) + .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime))) + .logtime(new Date()) + .vbat(vbat) + .batsta(batsta) + .rsrp(rsrp) + .sin(pci) + .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) + .build());//存储采集数据 + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) continue; + + //3.清除设备告警 + alarmRecordsService.cancelDeviceAlarm(devCode); + //4.存报警 + //若没绑定井,则不产生报警 + boolean alarmFlag = false; + if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { + //获取报警规则 + List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); + for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { + if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && + Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { + alarmFlag = true; + //写入报警 + //1、判断报警是否已存在 + if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.TubeOther.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); + //7.更新管线状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java index d248540..b33a1ee 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java @@ -91,7 +91,6 @@ } - public List getBusAlarmLedgerList(String devCode) { return this.dataGasMapper.getListByDevCode(devCode); } @@ -113,6 +112,13 @@ for (int i = 0; i < jsonArray.size(); i++) { try { String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) .findFirst(); @@ -175,18 +181,18 @@ alarmRecordsService.cancelDeviceAlarm(devCode); //4.存报警 //若没绑定井,则不产生报警 - boolean alarmFlag = false; + boolean alarmFlag = false; if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { //获取报警规则 List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { - alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); } break; } @@ -197,7 +203,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及设备状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新监测井状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java index e848fce..6297093 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java @@ -84,42 +84,78 @@ } - @Transactional - public void processAlarmData(JSONObject jsonObject, String devCode) { - JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + public void processEventAlarm(String devCode, String eventTypeCode, String logTime, String eventValue) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - //获取报警事件 - List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - - List busWellDTOList = dataGasMapper.getListByDevCode(devCode); - //若没绑定井,则不产生报警 - if (busWellDTOList != null && busWellDTOList.size() > 0) { - - for (int i = 0; i < jsonArray.size(); i++) { + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + //特殊处理消警 + if ("0".equals(eventValue)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, eventTypeCode); + } + return; } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> eventTypeCode.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 - if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + if (!alarmDeviceRuleResponseDTO.isPresent()) return; //1.查询是否已存在该类报警 - if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) return; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); - - + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + } + } + } + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + try { + String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmEventCode)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } } } } @@ -169,7 +205,76 @@ .rightVibrateAlarm(VibR) .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(uptime))) .logtime(new Date()) - .build());//存储采集数据 + .build()); + + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + ruleResponseDTOList.forEach(ruleResponseDTO -> { + + if ("Sloping".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Sloping)&&(!alarmRecordsService.isWatchAlarms(devCode,"Sloping"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Sloping", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Sloping)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Sloping"); + + } + } + if ("Destroy".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Destroy)&&(!alarmRecordsService.isWatchAlarms(devCode,"Destroy"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Destroy", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Destroy)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Destroy"); + + } + } + if ("Leak".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Leak)&&(!alarmRecordsService.isWatchAlarms(devCode,"Leak"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Leak", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Leak)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Leak"); + + } + } + if ("DiscL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscL)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscL"); + + } + } + if ("DiscR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscR)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscR"); + } + } + + if ("VibL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibL)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibL"); + } + } + if ("VibR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibR)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibR"); + } + } + }); + +// //处理报警事件 +// processEventAlarm(devCode,"Sloping",uptime,Sloping); +// processEventAlarm(devCode,"Destroy",uptime,Destroy); +// processEventAlarm(devCode,"Leak",uptime,Leak); +// processEventAlarm(devCode,"DiscL",uptime,DiscL); +// processEventAlarm(devCode,"DiscR",uptime,DiscR); +// processEventAlarm(devCode,"VibL",uptime,VibL); +// processEventAlarm(devCode,"VibR",uptime,VibR); + //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -197,7 +302,7 @@ if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && gas >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), gas)) { @@ -213,7 +318,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R,alarmFlag?"燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R, alarmFlag ? "燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java index f913775..895d201 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java @@ -89,6 +89,7 @@ String bfcf = busDeviceService.getBfcf(devCode); if (DictEnum.BF_ON.equals(bfcf)) { JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); //获取报警事件 List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); List busWellDTOList = dataGasMapper.getListByDevCode(devCode); @@ -96,25 +97,43 @@ if (busWellDTOList != null && busWellDTOList.size() > 0) { for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 if (!alarmDeviceRuleResponseDTO.isPresent()) continue; //1.查询是否已存在该类报警 if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { @@ -141,6 +160,9 @@ String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); gas = String.format("%.2f", Double.valueOf(gas)); //1.存数据 save(DataTubeOther.builder() @@ -156,6 +178,9 @@ .rsrp(rsrp) .sin(pci) .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) .build());//存储采集数据 //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -186,7 +211,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 98e736b..2288075 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -216,5 +216,15 @@ public ReturnDTO syncDeviceStatus() { return ReturnUtil.success(iBusDeviceService.syncDeviceStatus()); } + + @ApiOperation("根据闸井id获取设备信息") + @PostMapping("/getListByWellId") + @ResponseBody + public ReturnDTO getListByWellId(@RequestBody IdDTO idDTO) { + Assert.isFalse(ObjectUtil.isEmpty(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iBusDeviceService.getListByWellId(idDTO.getId())); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java index 72a2d84..d6d9743 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java @@ -85,6 +85,7 @@ return ReturnUtil.success(iBusLedgerService.detail(idDTO.getId())); } + /** * 同步三级部门 * diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java index 9e412d2..4316b56 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java @@ -1,22 +1,33 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.response.ErrorResponseData; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; +import com.casic.missiles.modular.device.dto.BusPositionImportDTO; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.ReturnUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataAccessException; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; /** @@ -40,8 +51,44 @@ @PostMapping("/addPosition") @ResponseBody public ReturnDTO addPosition(@RequestBody BusLedgerPipe busLedgerPipe) { + + List busLedgerPipeList = iBusLedgerPipeService.getListByNumber(busLedgerPipe.getTagNumber()); + if(busLedgerPipeList!=null&&busLedgerPipeList.size()>0){ + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE,"安装位号已存!!!"); + } + Long id =IdUtil.getSnowflake(1,2).nextId(); + busLedgerPipe.setId(id); iBusLedgerPipeService.save(busLedgerPipe); - return ReturnUtil.success(busLedgerPipe.getId()); + return ReturnUtil.success(id); + } + + @ApiOperation("批量导入") + @RequestMapping(value = "/batchImport", method = RequestMethod.POST) + @ResponseBody + public Object batchImport(@RequestParam("file") MultipartFile file) { + List results = new ArrayList<>(); + try { + results = this.importExcel(BusPositionImportDTO.class, file, null, null); + List list = iBusLedgerPipeService.addPositionBatch(results); + if (!CollectionUtil.isEmpty(list)) { + //获取校验报错信息 + return new ErrorResponseData(list.get(0)); + } + } catch (Exception e) { + return catchMybatisPlusException(e, "导入位置信息失败"); + } + return ResponseData.success(); + } + + private ResponseData catchMybatisPlusException(Exception e, String errorMsg) { + if (e instanceof DataAccessException) { + DataAccessException mybatisPlusException = (DataAccessException) e; + String message = mybatisPlusException.getRootCause().getMessage(); + if (message.contains("Duplicate entry '")) { + return new ErrorResponseData("安装位号重复:" + message.replaceAll("Duplicate entry '", "").replaceAll("' for key 'DEVCODE'", "")); + } + } + return new ErrorResponseData(errorMsg); } @ApiOperation("编辑点位") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java index d1e08a8..d938876 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java @@ -51,6 +51,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getOperatorName()), "CREATE_USER", request.getOperatorName()); queryWrapper.ge(ObjectUtil.isNotEmpty(request.getStartTime()), "START_TIME", request.getStartTime()); queryWrapper.le(ObjectUtil.isNotEmpty(request.getEndTime()), "END_TIME", request.getEndTime()); + queryWrapper.orderByDesc("START_TIME"); return ReturnUtil.success(super.packForBT(iSyncLogService.page(page, queryWrapper))); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java index 5ee5291..23ddee9 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java @@ -73,4 +73,12 @@ " where bd.DEVCODE= #{devcode} and bd.VALID=1 " + ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD asc") List getDeviceTypeRule(@Param("devcode") String devcode); + + + @Select("SELECT bd.* from bus_device bd " + + "left JOIN bus_device_ledger bl on bd.id= bl.DEVICE_ID and bl.VALID=1 " + + "LEFT JOIN bus_ledger_all_view bv on bv.id= bl.LEDGER_ID and bv.type= bl.TYPE and bv.VALID=1 " + + "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") + List getListByWellId(@Param("wellId") Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java index e1d16c4..a4c3f7a 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java @@ -37,7 +37,7 @@ @Select("SELECT b.ORG_ID,b.ORG_CODE,b.ORG_NAME,b.PARENT_ID FROM `bus_sync_org_relation` b WHERE b.DEL_FLAG =0 and b.PARENT_ID = #{syncId} ") List synDept(@Param("syncId") String syncId); - @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view ") + @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view where VALID=1") List getBusLedgers(); @Select("SELECT DEVCODE FROM `bus_device` where VALID>0 ") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml index 99ef10b..c6d1fff 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml @@ -29,6 +29,7 @@ bp.DEVICE_MODEL as deviceModel, bt.TYPE_NAME as typeName, + bp.DATA_SERVICE as deviceCategory, bm.`NAME` as manufactureName, bl.tagNumber as tagNumber, bl.id as ledgerId, @@ -81,6 +82,10 @@ and bd.LOGTIME #{request.logTime2} + + and bp.DATA_SERVICE =#{request.deviceCategory} + + ORDER BY bd.INSTALL_DATE DESC diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml index bdadb6a..d3f4684 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml @@ -40,7 +40,7 @@ `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + AND bdl.VALID = 1 JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -99,8 +99,8 @@ bm.`NAME` as manufactureName FROM `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE - LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID and bdl.type=blp.type + AND bdl.VALID = 1 LEFT JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -117,7 +117,9 @@ WITH station_temp as(SELECT bl.ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID FROM `bus_ledger` bl where bl.VALID=1 and bl.TYPE =2) - select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME from station_temp bl + select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME,bd.DEVCODE from station_temp bl left join bus_device_ledger bdl on bdl.LEDGER_ID = bl.ID and bdl.TYPE =2 and bdl.valid=1 left join bus_device bd on bd.id= bdl.DEVICE_ID and bd.VALID=1 order by bl.ID diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml index 7b92b04..1d97c64 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml @@ -184,7 +184,7 @@ WHERE EQ_LOCNO like 'N%' and - EQ_CATEGORY in (1,3) + EQ_CATEGORY in (1,2,3,5) diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java index 859cf08..143b42d 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java @@ -23,6 +23,9 @@ @ApiModelProperty("设备类型id") private Long typeId; + @ApiModelProperty("产品名称") + private String productName; + @ApiModelProperty("指令集合") private List commandConfigList; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java index 646610b..2cb5894 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("最新上传结束时间") private String logTime2; + + @ApiModelProperty("设备类别(0:自有设备,1:数据服务)") + private String deviceCategory; } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java index 8c95537..28b30fa 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java @@ -44,6 +44,9 @@ @ExcelProperty("关联管线") private String pipeCode; + @ExcelProperty("监测类型") + private String monitorType; + private String watchObject; private Long deviceType; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java index 0980c34..ac5daf0 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java @@ -24,4 +24,7 @@ @ApiModelProperty("详细位置") private String position; + @ApiModelProperty("1:其他,3:管线") + private String type; + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java new file mode 100644 index 0000000..bce7ebd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.device.dto; + + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class BusPositionImportDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + + @ExcelProperty("管线编号") + private String pipeCode; + + @ExcelProperty("安装位号") + private String tagNumber; + + @ExcelProperty("经度(高德)") + private String lngGaode; + + @ExcelProperty("纬度(高德)") + private String latGaode; + + @ExcelProperty("详细位置") + private String position; + + @ExcelProperty("管理单位") + private Long deptid; + + @ExcelProperty("位置类别") + private String type; + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java index 58faa0e..d72ae78 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java @@ -16,13 +16,13 @@ private String deviceId; //移动命令:left right up down left_up left_down right_up right_down GOTO_PRESET - @ApiModelProperty("移动命令") + @ApiModelProperty("移动命令(left right up down left_up left_down right_up right_down)") private String command; - @ApiModelProperty("速度") + @ApiModelProperty("速度,一般传100") private String speed; - @ApiModelProperty("启停命令") + @ApiModelProperty("启停命令(0:开始,1:结束)") private String cameraAction; @ApiModelProperty("预置点编号") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java index b4ec73c..5a3d0b0 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java @@ -66,7 +66,7 @@ private String powerSupplyMode; - @ApiModelProperty("是否结束数据服务") + @ApiModelProperty("是否结束数据服务(1:是,0:否)") @TableField("DATA_SERVICE") private String dataService; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java index 1184995..407e3c1 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java @@ -193,10 +193,14 @@ @TableField(exist = false) private String bfztName; + @ApiModelProperty("设备类别(0:自有设备,1:数据服务)") + @TableField(exist = false) + private String deviceCategory; + public BusDevice() { } - public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds) { + public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds, String monitorType) { this.devcode = devcode; this.deviceType = deviceType; this.productId = productId; @@ -204,6 +208,7 @@ this.installDate = installDate; this.watchObject = watchObject; this.ledgerIds = ledgerIds; + this.monitorType = monitorType; } public static List convertDeviceList(List dtoList) { @@ -227,7 +232,8 @@ deviceImportDTO.getValid(), deviceImportDTO.getInstallDate(), deviceImportDTO.getWatchObject(), - deviceImportDTO.getLedgerIds())); + deviceImportDTO.getLedgerIds(), + deviceImportDTO.getMonitorType())); }); return busDeviceList; } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java index 12b52de..1ac8455 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java @@ -1,16 +1,20 @@ package com.casic.missiles.modular.device.entity; +import cn.hutool.core.util.IdUtil; 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 com.casic.missiles.modular.device.dto.BusPositionImportDTO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import java.io.Serializable; +import java.util.ArrayList; import java.util.Date; +import java.util.List; /** *

@@ -29,7 +33,7 @@ private static final long serialVersionUID = 1L; @ApiModelProperty("主键") - @TableId(value = "ID", type = IdType.AUTO) +// @TableId(value = "ID", type = IdType.AUTO) private Long id; @ApiModelProperty("编号") @@ -60,6 +64,10 @@ @TableField("DEPTID") private Long deptid; + @ApiModelProperty("类别(1:其他,3:管线)") + @TableField("`TYPE`") + private String type; + @ApiModelProperty("责任部门") @TableField("RESPONSIBLE_DEPT") private Long responsibleDept; @@ -110,9 +118,10 @@ public BusLedgerPipe() { } - public BusLedgerPipe(String pipeCode, String ledgerName, String tagNumber, + public BusLedgerPipe(Long id,String pipeCode, String ledgerName, String tagNumber, String lngGaode, String latGaode, String position, - Long deptid, String devcode) { + Long deptid, String devcode, String type) { + this.id=id; this.pipeCode = pipeCode; this.ledgerName = ledgerName; this.tagNumber = tagNumber; @@ -121,5 +130,26 @@ this.position = position; this.deptid = deptid; this.devcode = devcode; + this.type = type; } + + public static List convertDeviceList(List dtoList) { + + + List busDeviceList = new ArrayList<>(); + dtoList.forEach(positionImportDTO -> { + + busDeviceList.add(new BusLedgerPipe(IdUtil.getSnowflake(1,2).nextId(),positionImportDTO.getPipeCode(), + positionImportDTO.getTagNumber(), + positionImportDTO.getTagNumber(), + positionImportDTO.getLngGaode(), + positionImportDTO.getLatGaode(), + positionImportDTO.getPosition(), + positionImportDTO.getDeptid(), + "", + positionImportDTO.getType())); + }); + return busDeviceList; + } + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java index aaaa409..63c0576 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java @@ -52,4 +52,8 @@ List getDeviceRule(String devcode); + List getDevicesByCodes(List devcodes); + + List getListByWellId(Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java index 14f6a93..8692383 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java @@ -2,11 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; -import com.casic.missiles.core.datascope.DataScope; -import com.casic.missiles.modular.device.dto.BusLedgerPipeMonitorRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeResponseDTO; -import com.casic.missiles.modular.device.dto.MonitorDataRequestDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import java.util.List; @@ -26,17 +22,21 @@ Page monitorPipePageList(Page page, BusLedgerPipeMonitorRequestDTO request); - BusLedgerPipeResponseDTO detail(Long id,String devcode); + BusLedgerPipeResponseDTO detail(Long id, String devcode); - List> watchDataByPipe(MonitorDataRequestDTO requestDTO); + List> watchDataByPipe(MonitorDataRequestDTO requestDTO); - List> pipeList(); + List> pipeList(); - List> deviceList(); + List> deviceList(); BusLedgerPipe saveBusLedgerPipe(BusLedgerPipe busLedgerPipe); Boolean updateMonitorStatus(List tagNumbers); + List addPositionBatch(List results); + + List getListByNumber(String tagNumber); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java index 66ed812..ad72230 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java @@ -12,9 +12,12 @@ import com.casic.missiles.modular.device.dto.BusConfigOtherDTO; import com.casic.missiles.modular.device.dto.BusConfigRequestDTO; import com.casic.missiles.modular.device.entity.BusConfig; +import com.casic.missiles.modular.device.entity.BusDevice; import com.casic.missiles.modular.device.service.IBusConfigService; +import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.HttpClientUtils; import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -22,6 +25,9 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.LinkedBlockingDeque; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; /** *

@@ -36,6 +42,11 @@ public class BusConfigServiceImpl extends ServiceImpl implements IBusConfigService { private final AbstractPermissionContext abstractPermissionContext; + private final IBusDeviceService iBusDeviceService; + private final ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(3, 6, 60, TimeUnit.SECONDS, new LinkedBlockingDeque<>(10)); + + @Value("${casic.brSendConfigUrl}") + private String brSendConfigUrl; @Transactional @Override @@ -105,6 +116,42 @@ .operator(user != null ? user.getId() : null) .operatorName(user != null ? user.getName() : "").build()); }); + + + threadPoolExecutor.execute( + () -> { + //发送第三方下发: + if (busConfigOtherDTO.getProductName().contains("管网哨兵")) { + List busDeviceList = iBusDeviceService.getDevicesByCodes(devcodes); + for (BusDevice busDevice : busDeviceList) { + if (ObjectUtil.isAllNotEmpty(busDevice.getNbProductId(), busDevice.getNbDeviceId())) { + Map commandMap = new HashMap<>(); + commandMap.put("productId", busDevice.getNbProductId()); + commandMap.put("devCode", busDevice.getDevcode()); + commandMap.put("deviceId", busDevice.getNbDeviceId()); + commandMap.put("cmdList", busConfigOtherDTO.getCommandConfigList()); + HttpClientUtils.post(brSendConfigUrl+"/tube/config/send", JSON.toJSONString(commandMap)); + } + } + } else if (busConfigOtherDTO.getProductName().contains("智能警示桩")) { + + List busDeviceList = iBusDeviceService.getDevicesByCodes(devcodes); + for (BusDevice busDevice : busDeviceList) { + if (ObjectUtil.isAllNotEmpty(busDevice.getNbProductId(), busDevice.getNbDeviceId())) { + Map commandMap = new HashMap<>(); + commandMap.put("productId", busDevice.getNbProductId()); + commandMap.put("devCode", busDevice.getDevcode()); + commandMap.put("deviceId", busDevice.getNbDeviceId()); + commandMap.put("cmdList", busConfigOtherDTO.getCommandConfigList()); + HttpClientUtils.post(brSendConfigUrl+"/sentinel/config/send", JSON.toJSONString(commandMap)); + } + } + + } + } + ); + + return this.saveBatch(busConfigs); // List> mapList = new ArrayList<>(); // Map commandMap = new HashMap<>(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java index 60d15e5..bae6902 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java @@ -3,6 +3,7 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -80,6 +81,7 @@ @Override public Page listPage(Page page, BusDeviceDTO request) { + page.setOptimizeCountSql(false); Page busDevicePage = this.baseMapper.pageList(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List busDeviceList = busDevicePage.getRecords(); busDeviceList.forEach(busDevice -> { @@ -227,7 +229,7 @@ if (deviceDataEnum.getTableColumns().contains("cell")) { String[] queryColumns = deviceDataEnum.getQueryColumns().split(",", 4); resultMap = this.baseMapper.cellAnalysis(deviceDataEnum.getTableName(), - "cell,uptime", + deviceDataEnum.getCellColumn(), queryColumns[0], queryColumns[1], deviceDataEnum.getOrderColumn(), @@ -265,14 +267,13 @@ } else { List busDeviceLedgers = busDeviceLedgerService.getListByDeviceId(busDevice.getId()); //没绑定关系,先绑定 - if (ObjectUtil.isNotEmpty(busDeviceLedgers)) { + if (busDeviceLedgers == null || busDeviceLedgers.size() < 1) { busDeviceLedgerService.saveDeviceLedger(busDevice.getId(), busDevice.getLedgerIds(), busDevice.getWatchObject()); } else { //已绑定,判断是否位置变了 List ledgerIdsPre = busDeviceLedgers.stream().map(BusDeviceLedger::getLedgerId).collect(Collectors.toList()); if (ledgerIds.containsAll(ledgerIdsPre) && ledgerIdsPre.containsAll(ledgerIds)) { } else { - busDeviceLedgerService.deleteDeviceLedgers(Arrays.asList(busDevice.getId())); busDeviceLedgerService.saveDeviceLedger(busDevice.getId(), busDevice.getLedgerIds(), busDevice.getWatchObject()); } } @@ -304,6 +305,8 @@ List codeList = iBusLedgerService.getCodeLists(); //获取管线编号 List pipeCodeList = iBusLedgerService.getPipeCodeList(); + List pipeList = new ArrayList<>(); + final Integer[] index = {1}; results.forEach(deviceImportDTO -> { index[0]++; @@ -357,22 +360,16 @@ return; } //新增点位 - if ("3".equals(deviceImportDTO.getWatchObject())) { + if ("3".equals(deviceImportDTO.getWatchObject()) || "1".equals(deviceImportDTO.getWatchObject())) { //toDo:安装位号一致,入一次即可 //为管线 - BusLedgerPipe busLedgerPipe = new BusLedgerPipe(deviceImportDTO.getPipeCode(), deviceImportDTO.getTagNumber(), + Long pipeLedgerId = IdUtil.getSnowflake(1, 2).nextId(); + BusLedgerPipe busLedgerPipe = new BusLedgerPipe(pipeLedgerId, deviceImportDTO.getPipeCode(), deviceImportDTO.getTagNumber(), deviceImportDTO.getTagNumber(), deviceImportDTO.getLng(), deviceImportDTO.getLat(), - deviceImportDTO.getPosition(), deviceImportDTO.getDeptid(), deviceImportDTO.getDevCode()); - busLedgerPipe = iBusLedgerPipeService.saveBusLedgerPipe(busLedgerPipe); - deviceImportDTO.setLedgerIds(Arrays.asList(busLedgerPipe.getId())); - }else if("1".equals(deviceImportDTO.getWatchObject())){ - //新增闸井 - BusLedger busLedger = new BusLedger(deviceImportDTO.getTagNumber(), - deviceImportDTO.getTagNumber(),deviceImportDTO.getTagNumber(), - deviceImportDTO.getLng(),deviceImportDTO.getLat(),deviceImportDTO.getPosition(), - deviceImportDTO.getDeptid()); - this.iBusLedgerService.save(busLedger); - deviceImportDTO.setLedgerIds(Arrays.asList(busLedger.getId())); + deviceImportDTO.getPosition(), deviceImportDTO.getDeptid(), deviceImportDTO.getDevCode(), deviceImportDTO.getWatchObject()); +// busLedgerPipe = iBusLedgerPipeService.saveBusLedgerPipe(busLedgerPipe); + pipeList.add(busLedgerPipe); + deviceImportDTO.setLedgerIds(Arrays.asList(pipeLedgerId)); } } @@ -383,6 +380,10 @@ return list; } + if (pipeList != null && pipeList.size() > 0) { + iBusLedgerPipeService.saveBatch(pipeList); + } + List busDeviceList = BusDevice.convertDeviceList(results); //保存设备信息 @@ -514,7 +515,7 @@ } -// @Cacheable(value = "alarmRuleCache", key = "#devcode") + // @Cacheable(value = "alarmRuleCache", key = "#devcode") @Override public List getDeviceRule(String devcode) { List alarmRuleValueList = this.baseMapper.getSpecialDeviceRule(devcode); @@ -523,4 +524,18 @@ } return alarmRuleValueList; } + + + @Override + public List getDevicesByCodes(List devcodes) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("DEVCODE", devcodes); + queryWrapper.eq("VALID", "1"); + return this.baseMapper.selectList(queryWrapper); + } + + @Override + public List getListByWellId(Long wellId) { + return this.baseMapper.getListByWellId(wellId); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java index 5073159..7f8bfdc 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service.impl; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -12,11 +13,8 @@ import com.casic.missiles.enums.DeviceDataEnum; import com.casic.missiles.modular.device.dao.BusDeviceMapper; import com.casic.missiles.modular.device.dao.BusLedgerPipeMapper; -import com.casic.missiles.modular.device.dto.BusLedgerPipeMonitorRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeResponseDTO; -import com.casic.missiles.modular.device.dto.MonitorDataRequestDTO; -import com.casic.missiles.modular.device.entity.BusLedgerPipe; +import com.casic.missiles.modular.device.dto.*; +import com.casic.missiles.modular.device.entity.*; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.server.CommonServer; @@ -24,11 +22,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.stream.Collectors; /** *

@@ -63,6 +60,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getPipeCode()), "PIPE_CODE", request.getPipeCode()); queryWrapper.like(ObjectUtil.isNotEmpty(request.getPosition()), "POSITION", request.getPosition()); queryWrapper.in(ObjectUtil.isNotEmpty(deptIds), "DEPTID", deptIds); + queryWrapper.eq(ObjectUtil.isNotEmpty(request.getType()), "TYPE", request.getType()); Page pipePage = this.page(page, queryWrapper); List pipeList = pipePage.getRecords(); pipeList.forEach(pipe -> { @@ -156,6 +154,12 @@ return busLedgerPipe; } + public List getList() { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("VALID", "1"); + return this.baseMapper.selectList(queryWrapper); + } + @Override public Boolean updateMonitorStatus(List tagNumbers) { UpdateWrapper updateWrapper = new UpdateWrapper<>(); @@ -163,4 +167,43 @@ updateWrapper.set("MONITOR_STATE", "3"); return this.update(updateWrapper); } + + @Transactional + @Override + public List addPositionBatch(List results) { + List list = new ArrayList<>(); + if (!CollectionUtil.isEmpty(results)) { + List busLedgerPipeList = this.getList(); + List tagCodes = busLedgerPipeList.stream().map(BusLedgerPipe::getTagNumber).collect(Collectors.toList()); + final Integer[] index = {1}; + results.forEach(busPositionImportDTO -> { + index[0]++; + //设备编号查重 + if (tagCodes.contains(busPositionImportDTO.getTagNumber())) { + list.add("第" + index[0] + "行,安装位号已存在!"); + return; + } + + }); + if (CollectionUtil.isNotEmpty(list)) { + return list; + } + List busDeviceList = BusLedgerPipe.convertDeviceList(results); + + //保存点位信息 + this.saveBatch(busDeviceList); + + } else { + list.add("导入数据不能为空"); + } + return list; + } + + @Override + public List getListByNumber(String tagNumber) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("VALID", "1"); + queryWrapper.eq("TAG_NUMBER", tagNumber); + return this.baseMapper.selectList(queryWrapper); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java index 5798675..ec2b3f5 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.modular.device.dao.SyncLogMapper; import com.casic.missiles.modular.device.entity.SyncLog; import com.casic.missiles.modular.device.service.ISyncLogDetailService; @@ -39,7 +40,8 @@ syncLog.setUpdateCount(updateCount); syncLog.setAddCount(addCount); syncLog.setDeleteCount(deleteCount); - syncLog.setCreateUser(permissionContext.getAuthService().getLoginUser().getName()); + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + syncLog.setCreateUser(null == authUser ? "admin" : authUser.getName()); return this.baseMapper.insert(syncLog) > 0 ? true : false; } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java new file mode 100644 index 0000000..fc881a1 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.data.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 外协管盯 前端控制器 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RestController +@RequestMapping("/system/dataGasOther") +public class DataGasOtherController { + +} + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java new file mode 100644 index 0000000..b5f3627 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.data.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 外协管盯 Mapper 接口 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Mapper +public interface DataGasOtherMapper extends BaseMapper { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml new file mode 100644 index 0000000..8ce1455 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID, DEVCODE, WELL_CODE, WELL_NUMBER, GASVAL, VBAT, BATSTA, SIN, RSRP, SINR, UPTIME, LOGTIME, SIG, TEMP, SS_STATE + + + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java new file mode 100644 index 0000000..53972ba --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java @@ -0,0 +1,94 @@ +package com.casic.missiles.modular.data.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 外协管盯 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Builder +@Data +@TableName("data_gas_other") +@ApiModel(value = "DataGasOther对象", description = "外协管盯") +public class DataGasOther implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId("ID") + private Long id; + + @ApiModelProperty("设备编号") + @TableField("DEVCODE") + private String devcode; + + @ApiModelProperty("点位编号") + @TableField("WELL_CODE") + private String wellCode; + + @ApiModelProperty("位号") + @TableField("WELL_NUMBER") + private String wellNumber; + + @ApiModelProperty("气体浓度采样值") + @TableField("GASVAL") + private String gasval; + + @ApiModelProperty("设备电池电压值(毫伏)") + @TableField("VBAT") + private String vbat; + + @ApiModelProperty("电池状态0 正常、 1 低电告警、2 关机") + @TableField("BATSTA") + private String batsta; + + @ApiModelProperty("接收信号强度等级") + @TableField("SIN") + private String sin; + + @ApiModelProperty("接收信号参考质量 服务小 区的 RSRP 值") + @TableField("RSRP") + private String rsrp; + + @ApiModelProperty("信噪比") + @TableField("SINR") + private String sinr; + + @ApiModelProperty("采集时间") + @TableField("UPTIME") + private Date uptime; + + @ApiModelProperty("上传时间") + @TableField("LOGTIME") + private Date logtime; + + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态,0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java index 86077b8..f4d4417 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java @@ -76,4 +76,17 @@ private Date logtime; + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态:0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java new file mode 100644 index 0000000..842ca0b --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.data.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.data.entity.DataGasOther; + +/** + *

+ * 外协管盯 服务类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +public interface IDataGasOtherService extends IService { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java new file mode 100644 index 0000000..4c660e9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java @@ -0,0 +1,226 @@ +package com.casic.missiles.modular.data.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.enums.DeviceTypeEnum; +import com.casic.missiles.enums.DictEnum; +import com.casic.missiles.modular.alarm.dto.AlarmDeviceRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.AlarmRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.BusAlarmLedgerDTO; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.data.dao.DataGasMapper; +import com.casic.missiles.modular.data.dao.DataGasOtherMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import com.casic.missiles.modular.data.entity.DataTubeOther; +import com.casic.missiles.modular.data.service.IDataAbstractService; +import com.casic.missiles.modular.data.service.IDataGasOtherService; +import com.casic.missiles.modular.data.service.ITrackLogService; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Optional; + +/** + *

+ * 外协管盯 服务实现类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RequiredArgsConstructor +@Service +public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { + + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + private final DataGasMapper dataGasMapper; + private final IAlarmRecordsService alarmRecordsService; + private final IAlarmRuleService alarmRuleService; + private final ITrackLogService iTrackLogService; + private final IBusDeviceService busDeviceService; + + @Override + public void process(String dataContent) { + + //解析数据+根据业务处理存储数据 + JSONObject json = JSONObject.parseObject(dataContent); + String devCode = json.get("devCode").toString(); + JSONObject jsonObject = json.getJSONObject("mBody"); + if (mType[0].equals(json.get("mType")) || mType[3].equals(json.get("mType"))) {//存储上报数据 + this.processNormalData(jsonObject, devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + this.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.TubeOther.name().equals(json.get("devType"))) { + if ("TubeOtherConfigSuccess".equals(jsonObject.get("bType"))) { +// deviceConfigManager.updateStatus(devCode); + } + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } else if (mType[4].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); +// imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; + try { + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); + } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + } + } + + @Transactional + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.getString("cell"); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = jsonObject.getJSONArray("datas"); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + String bfcf = busDeviceService.getBfcf(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).getString("gasval"); + String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); + String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); + String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataGasOther.builder() + .wellCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .wellNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .devcode(devCode) +// .cell(cell) + .gasval(gas) + .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime))) + .logtime(new Date()) + .vbat(vbat) + .batsta(batsta) + .rsrp(rsrp) + .sin(pci) + .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) + .build());//存储采集数据 + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) continue; + + //3.清除设备告警 + alarmRecordsService.cancelDeviceAlarm(devCode); + //4.存报警 + //若没绑定井,则不产生报警 + boolean alarmFlag = false; + if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { + //获取报警规则 + List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); + for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { + if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && + Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { + alarmFlag = true; + //写入报警 + //1、判断报警是否已存在 + if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.TubeOther.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); + //7.更新管线状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java index d248540..b33a1ee 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java @@ -91,7 +91,6 @@ } - public List getBusAlarmLedgerList(String devCode) { return this.dataGasMapper.getListByDevCode(devCode); } @@ -113,6 +112,13 @@ for (int i = 0; i < jsonArray.size(); i++) { try { String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) .findFirst(); @@ -175,18 +181,18 @@ alarmRecordsService.cancelDeviceAlarm(devCode); //4.存报警 //若没绑定井,则不产生报警 - boolean alarmFlag = false; + boolean alarmFlag = false; if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { //获取报警规则 List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { - alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); } break; } @@ -197,7 +203,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及设备状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新监测井状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java index e848fce..6297093 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java @@ -84,42 +84,78 @@ } - @Transactional - public void processAlarmData(JSONObject jsonObject, String devCode) { - JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + public void processEventAlarm(String devCode, String eventTypeCode, String logTime, String eventValue) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - //获取报警事件 - List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - - List busWellDTOList = dataGasMapper.getListByDevCode(devCode); - //若没绑定井,则不产生报警 - if (busWellDTOList != null && busWellDTOList.size() > 0) { - - for (int i = 0; i < jsonArray.size(); i++) { + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + //特殊处理消警 + if ("0".equals(eventValue)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, eventTypeCode); + } + return; } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> eventTypeCode.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 - if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + if (!alarmDeviceRuleResponseDTO.isPresent()) return; //1.查询是否已存在该类报警 - if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) return; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); - - + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + } + } + } + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + try { + String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmEventCode)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } } } } @@ -169,7 +205,76 @@ .rightVibrateAlarm(VibR) .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(uptime))) .logtime(new Date()) - .build());//存储采集数据 + .build()); + + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + ruleResponseDTOList.forEach(ruleResponseDTO -> { + + if ("Sloping".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Sloping)&&(!alarmRecordsService.isWatchAlarms(devCode,"Sloping"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Sloping", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Sloping)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Sloping"); + + } + } + if ("Destroy".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Destroy)&&(!alarmRecordsService.isWatchAlarms(devCode,"Destroy"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Destroy", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Destroy)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Destroy"); + + } + } + if ("Leak".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Leak)&&(!alarmRecordsService.isWatchAlarms(devCode,"Leak"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Leak", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Leak)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Leak"); + + } + } + if ("DiscL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscL)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscL"); + + } + } + if ("DiscR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscR)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscR"); + } + } + + if ("VibL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibL)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibL"); + } + } + if ("VibR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibR)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibR"); + } + } + }); + +// //处理报警事件 +// processEventAlarm(devCode,"Sloping",uptime,Sloping); +// processEventAlarm(devCode,"Destroy",uptime,Destroy); +// processEventAlarm(devCode,"Leak",uptime,Leak); +// processEventAlarm(devCode,"DiscL",uptime,DiscL); +// processEventAlarm(devCode,"DiscR",uptime,DiscR); +// processEventAlarm(devCode,"VibL",uptime,VibL); +// processEventAlarm(devCode,"VibR",uptime,VibR); + //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -197,7 +302,7 @@ if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && gas >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), gas)) { @@ -213,7 +318,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R,alarmFlag?"燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R, alarmFlag ? "燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java index f913775..895d201 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java @@ -89,6 +89,7 @@ String bfcf = busDeviceService.getBfcf(devCode); if (DictEnum.BF_ON.equals(bfcf)) { JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); //获取报警事件 List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); List busWellDTOList = dataGasMapper.getListByDevCode(devCode); @@ -96,25 +97,43 @@ if (busWellDTOList != null && busWellDTOList.size() > 0) { for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 if (!alarmDeviceRuleResponseDTO.isPresent()) continue; //1.查询是否已存在该类报警 if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { @@ -141,6 +160,9 @@ String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); gas = String.format("%.2f", Double.valueOf(gas)); //1.存数据 save(DataTubeOther.builder() @@ -156,6 +178,9 @@ .rsrp(rsrp) .sin(pci) .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) .build());//存储采集数据 //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -186,7 +211,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 98e736b..2288075 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -216,5 +216,15 @@ public ReturnDTO syncDeviceStatus() { return ReturnUtil.success(iBusDeviceService.syncDeviceStatus()); } + + @ApiOperation("根据闸井id获取设备信息") + @PostMapping("/getListByWellId") + @ResponseBody + public ReturnDTO getListByWellId(@RequestBody IdDTO idDTO) { + Assert.isFalse(ObjectUtil.isEmpty(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iBusDeviceService.getListByWellId(idDTO.getId())); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java index 72a2d84..d6d9743 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java @@ -85,6 +85,7 @@ return ReturnUtil.success(iBusLedgerService.detail(idDTO.getId())); } + /** * 同步三级部门 * diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java index 9e412d2..4316b56 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java @@ -1,22 +1,33 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.response.ErrorResponseData; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; +import com.casic.missiles.modular.device.dto.BusPositionImportDTO; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.ReturnUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataAccessException; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; /** @@ -40,8 +51,44 @@ @PostMapping("/addPosition") @ResponseBody public ReturnDTO addPosition(@RequestBody BusLedgerPipe busLedgerPipe) { + + List busLedgerPipeList = iBusLedgerPipeService.getListByNumber(busLedgerPipe.getTagNumber()); + if(busLedgerPipeList!=null&&busLedgerPipeList.size()>0){ + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE,"安装位号已存!!!"); + } + Long id =IdUtil.getSnowflake(1,2).nextId(); + busLedgerPipe.setId(id); iBusLedgerPipeService.save(busLedgerPipe); - return ReturnUtil.success(busLedgerPipe.getId()); + return ReturnUtil.success(id); + } + + @ApiOperation("批量导入") + @RequestMapping(value = "/batchImport", method = RequestMethod.POST) + @ResponseBody + public Object batchImport(@RequestParam("file") MultipartFile file) { + List results = new ArrayList<>(); + try { + results = this.importExcel(BusPositionImportDTO.class, file, null, null); + List list = iBusLedgerPipeService.addPositionBatch(results); + if (!CollectionUtil.isEmpty(list)) { + //获取校验报错信息 + return new ErrorResponseData(list.get(0)); + } + } catch (Exception e) { + return catchMybatisPlusException(e, "导入位置信息失败"); + } + return ResponseData.success(); + } + + private ResponseData catchMybatisPlusException(Exception e, String errorMsg) { + if (e instanceof DataAccessException) { + DataAccessException mybatisPlusException = (DataAccessException) e; + String message = mybatisPlusException.getRootCause().getMessage(); + if (message.contains("Duplicate entry '")) { + return new ErrorResponseData("安装位号重复:" + message.replaceAll("Duplicate entry '", "").replaceAll("' for key 'DEVCODE'", "")); + } + } + return new ErrorResponseData(errorMsg); } @ApiOperation("编辑点位") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java index d1e08a8..d938876 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java @@ -51,6 +51,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getOperatorName()), "CREATE_USER", request.getOperatorName()); queryWrapper.ge(ObjectUtil.isNotEmpty(request.getStartTime()), "START_TIME", request.getStartTime()); queryWrapper.le(ObjectUtil.isNotEmpty(request.getEndTime()), "END_TIME", request.getEndTime()); + queryWrapper.orderByDesc("START_TIME"); return ReturnUtil.success(super.packForBT(iSyncLogService.page(page, queryWrapper))); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java index 5ee5291..23ddee9 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java @@ -73,4 +73,12 @@ " where bd.DEVCODE= #{devcode} and bd.VALID=1 " + ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD asc") List getDeviceTypeRule(@Param("devcode") String devcode); + + + @Select("SELECT bd.* from bus_device bd " + + "left JOIN bus_device_ledger bl on bd.id= bl.DEVICE_ID and bl.VALID=1 " + + "LEFT JOIN bus_ledger_all_view bv on bv.id= bl.LEDGER_ID and bv.type= bl.TYPE and bv.VALID=1 " + + "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") + List getListByWellId(@Param("wellId") Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java index e1d16c4..a4c3f7a 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java @@ -37,7 +37,7 @@ @Select("SELECT b.ORG_ID,b.ORG_CODE,b.ORG_NAME,b.PARENT_ID FROM `bus_sync_org_relation` b WHERE b.DEL_FLAG =0 and b.PARENT_ID = #{syncId} ") List synDept(@Param("syncId") String syncId); - @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view ") + @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view where VALID=1") List getBusLedgers(); @Select("SELECT DEVCODE FROM `bus_device` where VALID>0 ") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml index 99ef10b..c6d1fff 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml @@ -29,6 +29,7 @@ bp.DEVICE_MODEL as deviceModel, bt.TYPE_NAME as typeName, + bp.DATA_SERVICE as deviceCategory, bm.`NAME` as manufactureName, bl.tagNumber as tagNumber, bl.id as ledgerId, @@ -81,6 +82,10 @@ and bd.LOGTIME #{request.logTime2} + + and bp.DATA_SERVICE =#{request.deviceCategory} + + ORDER BY bd.INSTALL_DATE DESC diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml index bdadb6a..d3f4684 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml @@ -40,7 +40,7 @@ `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + AND bdl.VALID = 1 JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -99,8 +99,8 @@ bm.`NAME` as manufactureName FROM `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE - LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID and bdl.type=blp.type + AND bdl.VALID = 1 LEFT JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -117,7 +117,9 @@ WITH station_temp as(SELECT bl.ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID FROM `bus_ledger` bl where bl.VALID=1 and bl.TYPE =2) - select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME from station_temp bl + select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME,bd.DEVCODE from station_temp bl left join bus_device_ledger bdl on bdl.LEDGER_ID = bl.ID and bdl.TYPE =2 and bdl.valid=1 left join bus_device bd on bd.id= bdl.DEVICE_ID and bd.VALID=1 order by bl.ID diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml index 7b92b04..1d97c64 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml @@ -184,7 +184,7 @@ WHERE EQ_LOCNO like 'N%' and - EQ_CATEGORY in (1,3) + EQ_CATEGORY in (1,2,3,5) diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java index 859cf08..143b42d 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java @@ -23,6 +23,9 @@ @ApiModelProperty("设备类型id") private Long typeId; + @ApiModelProperty("产品名称") + private String productName; + @ApiModelProperty("指令集合") private List commandConfigList; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java index 646610b..2cb5894 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("最新上传结束时间") private String logTime2; + + @ApiModelProperty("设备类别(0:自有设备,1:数据服务)") + private String deviceCategory; } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java index 8c95537..28b30fa 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java @@ -44,6 +44,9 @@ @ExcelProperty("关联管线") private String pipeCode; + @ExcelProperty("监测类型") + private String monitorType; + private String watchObject; private Long deviceType; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java index 0980c34..ac5daf0 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java @@ -24,4 +24,7 @@ @ApiModelProperty("详细位置") private String position; + @ApiModelProperty("1:其他,3:管线") + private String type; + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java new file mode 100644 index 0000000..bce7ebd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.device.dto; + + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class BusPositionImportDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + + @ExcelProperty("管线编号") + private String pipeCode; + + @ExcelProperty("安装位号") + private String tagNumber; + + @ExcelProperty("经度(高德)") + private String lngGaode; + + @ExcelProperty("纬度(高德)") + private String latGaode; + + @ExcelProperty("详细位置") + private String position; + + @ExcelProperty("管理单位") + private Long deptid; + + @ExcelProperty("位置类别") + private String type; + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java index 58faa0e..d72ae78 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java @@ -16,13 +16,13 @@ private String deviceId; //移动命令:left right up down left_up left_down right_up right_down GOTO_PRESET - @ApiModelProperty("移动命令") + @ApiModelProperty("移动命令(left right up down left_up left_down right_up right_down)") private String command; - @ApiModelProperty("速度") + @ApiModelProperty("速度,一般传100") private String speed; - @ApiModelProperty("启停命令") + @ApiModelProperty("启停命令(0:开始,1:结束)") private String cameraAction; @ApiModelProperty("预置点编号") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java index b4ec73c..5a3d0b0 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java @@ -66,7 +66,7 @@ private String powerSupplyMode; - @ApiModelProperty("是否结束数据服务") + @ApiModelProperty("是否结束数据服务(1:是,0:否)") @TableField("DATA_SERVICE") private String dataService; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java index 1184995..407e3c1 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java @@ -193,10 +193,14 @@ @TableField(exist = false) private String bfztName; + @ApiModelProperty("设备类别(0:自有设备,1:数据服务)") + @TableField(exist = false) + private String deviceCategory; + public BusDevice() { } - public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds) { + public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds, String monitorType) { this.devcode = devcode; this.deviceType = deviceType; this.productId = productId; @@ -204,6 +208,7 @@ this.installDate = installDate; this.watchObject = watchObject; this.ledgerIds = ledgerIds; + this.monitorType = monitorType; } public static List convertDeviceList(List dtoList) { @@ -227,7 +232,8 @@ deviceImportDTO.getValid(), deviceImportDTO.getInstallDate(), deviceImportDTO.getWatchObject(), - deviceImportDTO.getLedgerIds())); + deviceImportDTO.getLedgerIds(), + deviceImportDTO.getMonitorType())); }); return busDeviceList; } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java index 12b52de..1ac8455 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java @@ -1,16 +1,20 @@ package com.casic.missiles.modular.device.entity; +import cn.hutool.core.util.IdUtil; 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 com.casic.missiles.modular.device.dto.BusPositionImportDTO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import java.io.Serializable; +import java.util.ArrayList; import java.util.Date; +import java.util.List; /** *

@@ -29,7 +33,7 @@ private static final long serialVersionUID = 1L; @ApiModelProperty("主键") - @TableId(value = "ID", type = IdType.AUTO) +// @TableId(value = "ID", type = IdType.AUTO) private Long id; @ApiModelProperty("编号") @@ -60,6 +64,10 @@ @TableField("DEPTID") private Long deptid; + @ApiModelProperty("类别(1:其他,3:管线)") + @TableField("`TYPE`") + private String type; + @ApiModelProperty("责任部门") @TableField("RESPONSIBLE_DEPT") private Long responsibleDept; @@ -110,9 +118,10 @@ public BusLedgerPipe() { } - public BusLedgerPipe(String pipeCode, String ledgerName, String tagNumber, + public BusLedgerPipe(Long id,String pipeCode, String ledgerName, String tagNumber, String lngGaode, String latGaode, String position, - Long deptid, String devcode) { + Long deptid, String devcode, String type) { + this.id=id; this.pipeCode = pipeCode; this.ledgerName = ledgerName; this.tagNumber = tagNumber; @@ -121,5 +130,26 @@ this.position = position; this.deptid = deptid; this.devcode = devcode; + this.type = type; } + + public static List convertDeviceList(List dtoList) { + + + List busDeviceList = new ArrayList<>(); + dtoList.forEach(positionImportDTO -> { + + busDeviceList.add(new BusLedgerPipe(IdUtil.getSnowflake(1,2).nextId(),positionImportDTO.getPipeCode(), + positionImportDTO.getTagNumber(), + positionImportDTO.getTagNumber(), + positionImportDTO.getLngGaode(), + positionImportDTO.getLatGaode(), + positionImportDTO.getPosition(), + positionImportDTO.getDeptid(), + "", + positionImportDTO.getType())); + }); + return busDeviceList; + } + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java index aaaa409..63c0576 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java @@ -52,4 +52,8 @@ List getDeviceRule(String devcode); + List getDevicesByCodes(List devcodes); + + List getListByWellId(Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java index 14f6a93..8692383 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java @@ -2,11 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; -import com.casic.missiles.core.datascope.DataScope; -import com.casic.missiles.modular.device.dto.BusLedgerPipeMonitorRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeResponseDTO; -import com.casic.missiles.modular.device.dto.MonitorDataRequestDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import java.util.List; @@ -26,17 +22,21 @@ Page monitorPipePageList(Page page, BusLedgerPipeMonitorRequestDTO request); - BusLedgerPipeResponseDTO detail(Long id,String devcode); + BusLedgerPipeResponseDTO detail(Long id, String devcode); - List> watchDataByPipe(MonitorDataRequestDTO requestDTO); + List> watchDataByPipe(MonitorDataRequestDTO requestDTO); - List> pipeList(); + List> pipeList(); - List> deviceList(); + List> deviceList(); BusLedgerPipe saveBusLedgerPipe(BusLedgerPipe busLedgerPipe); Boolean updateMonitorStatus(List tagNumbers); + List addPositionBatch(List results); + + List getListByNumber(String tagNumber); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java index 66ed812..ad72230 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java @@ -12,9 +12,12 @@ import com.casic.missiles.modular.device.dto.BusConfigOtherDTO; import com.casic.missiles.modular.device.dto.BusConfigRequestDTO; import com.casic.missiles.modular.device.entity.BusConfig; +import com.casic.missiles.modular.device.entity.BusDevice; import com.casic.missiles.modular.device.service.IBusConfigService; +import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.HttpClientUtils; import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -22,6 +25,9 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.LinkedBlockingDeque; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; /** *

@@ -36,6 +42,11 @@ public class BusConfigServiceImpl extends ServiceImpl implements IBusConfigService { private final AbstractPermissionContext abstractPermissionContext; + private final IBusDeviceService iBusDeviceService; + private final ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(3, 6, 60, TimeUnit.SECONDS, new LinkedBlockingDeque<>(10)); + + @Value("${casic.brSendConfigUrl}") + private String brSendConfigUrl; @Transactional @Override @@ -105,6 +116,42 @@ .operator(user != null ? user.getId() : null) .operatorName(user != null ? user.getName() : "").build()); }); + + + threadPoolExecutor.execute( + () -> { + //发送第三方下发: + if (busConfigOtherDTO.getProductName().contains("管网哨兵")) { + List busDeviceList = iBusDeviceService.getDevicesByCodes(devcodes); + for (BusDevice busDevice : busDeviceList) { + if (ObjectUtil.isAllNotEmpty(busDevice.getNbProductId(), busDevice.getNbDeviceId())) { + Map commandMap = new HashMap<>(); + commandMap.put("productId", busDevice.getNbProductId()); + commandMap.put("devCode", busDevice.getDevcode()); + commandMap.put("deviceId", busDevice.getNbDeviceId()); + commandMap.put("cmdList", busConfigOtherDTO.getCommandConfigList()); + HttpClientUtils.post(brSendConfigUrl+"/tube/config/send", JSON.toJSONString(commandMap)); + } + } + } else if (busConfigOtherDTO.getProductName().contains("智能警示桩")) { + + List busDeviceList = iBusDeviceService.getDevicesByCodes(devcodes); + for (BusDevice busDevice : busDeviceList) { + if (ObjectUtil.isAllNotEmpty(busDevice.getNbProductId(), busDevice.getNbDeviceId())) { + Map commandMap = new HashMap<>(); + commandMap.put("productId", busDevice.getNbProductId()); + commandMap.put("devCode", busDevice.getDevcode()); + commandMap.put("deviceId", busDevice.getNbDeviceId()); + commandMap.put("cmdList", busConfigOtherDTO.getCommandConfigList()); + HttpClientUtils.post(brSendConfigUrl+"/sentinel/config/send", JSON.toJSONString(commandMap)); + } + } + + } + } + ); + + return this.saveBatch(busConfigs); // List> mapList = new ArrayList<>(); // Map commandMap = new HashMap<>(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java index 60d15e5..bae6902 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java @@ -3,6 +3,7 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -80,6 +81,7 @@ @Override public Page listPage(Page page, BusDeviceDTO request) { + page.setOptimizeCountSql(false); Page busDevicePage = this.baseMapper.pageList(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List busDeviceList = busDevicePage.getRecords(); busDeviceList.forEach(busDevice -> { @@ -227,7 +229,7 @@ if (deviceDataEnum.getTableColumns().contains("cell")) { String[] queryColumns = deviceDataEnum.getQueryColumns().split(",", 4); resultMap = this.baseMapper.cellAnalysis(deviceDataEnum.getTableName(), - "cell,uptime", + deviceDataEnum.getCellColumn(), queryColumns[0], queryColumns[1], deviceDataEnum.getOrderColumn(), @@ -265,14 +267,13 @@ } else { List busDeviceLedgers = busDeviceLedgerService.getListByDeviceId(busDevice.getId()); //没绑定关系,先绑定 - if (ObjectUtil.isNotEmpty(busDeviceLedgers)) { + if (busDeviceLedgers == null || busDeviceLedgers.size() < 1) { busDeviceLedgerService.saveDeviceLedger(busDevice.getId(), busDevice.getLedgerIds(), busDevice.getWatchObject()); } else { //已绑定,判断是否位置变了 List ledgerIdsPre = busDeviceLedgers.stream().map(BusDeviceLedger::getLedgerId).collect(Collectors.toList()); if (ledgerIds.containsAll(ledgerIdsPre) && ledgerIdsPre.containsAll(ledgerIds)) { } else { - busDeviceLedgerService.deleteDeviceLedgers(Arrays.asList(busDevice.getId())); busDeviceLedgerService.saveDeviceLedger(busDevice.getId(), busDevice.getLedgerIds(), busDevice.getWatchObject()); } } @@ -304,6 +305,8 @@ List codeList = iBusLedgerService.getCodeLists(); //获取管线编号 List pipeCodeList = iBusLedgerService.getPipeCodeList(); + List pipeList = new ArrayList<>(); + final Integer[] index = {1}; results.forEach(deviceImportDTO -> { index[0]++; @@ -357,22 +360,16 @@ return; } //新增点位 - if ("3".equals(deviceImportDTO.getWatchObject())) { + if ("3".equals(deviceImportDTO.getWatchObject()) || "1".equals(deviceImportDTO.getWatchObject())) { //toDo:安装位号一致,入一次即可 //为管线 - BusLedgerPipe busLedgerPipe = new BusLedgerPipe(deviceImportDTO.getPipeCode(), deviceImportDTO.getTagNumber(), + Long pipeLedgerId = IdUtil.getSnowflake(1, 2).nextId(); + BusLedgerPipe busLedgerPipe = new BusLedgerPipe(pipeLedgerId, deviceImportDTO.getPipeCode(), deviceImportDTO.getTagNumber(), deviceImportDTO.getTagNumber(), deviceImportDTO.getLng(), deviceImportDTO.getLat(), - deviceImportDTO.getPosition(), deviceImportDTO.getDeptid(), deviceImportDTO.getDevCode()); - busLedgerPipe = iBusLedgerPipeService.saveBusLedgerPipe(busLedgerPipe); - deviceImportDTO.setLedgerIds(Arrays.asList(busLedgerPipe.getId())); - }else if("1".equals(deviceImportDTO.getWatchObject())){ - //新增闸井 - BusLedger busLedger = new BusLedger(deviceImportDTO.getTagNumber(), - deviceImportDTO.getTagNumber(),deviceImportDTO.getTagNumber(), - deviceImportDTO.getLng(),deviceImportDTO.getLat(),deviceImportDTO.getPosition(), - deviceImportDTO.getDeptid()); - this.iBusLedgerService.save(busLedger); - deviceImportDTO.setLedgerIds(Arrays.asList(busLedger.getId())); + deviceImportDTO.getPosition(), deviceImportDTO.getDeptid(), deviceImportDTO.getDevCode(), deviceImportDTO.getWatchObject()); +// busLedgerPipe = iBusLedgerPipeService.saveBusLedgerPipe(busLedgerPipe); + pipeList.add(busLedgerPipe); + deviceImportDTO.setLedgerIds(Arrays.asList(pipeLedgerId)); } } @@ -383,6 +380,10 @@ return list; } + if (pipeList != null && pipeList.size() > 0) { + iBusLedgerPipeService.saveBatch(pipeList); + } + List busDeviceList = BusDevice.convertDeviceList(results); //保存设备信息 @@ -514,7 +515,7 @@ } -// @Cacheable(value = "alarmRuleCache", key = "#devcode") + // @Cacheable(value = "alarmRuleCache", key = "#devcode") @Override public List getDeviceRule(String devcode) { List alarmRuleValueList = this.baseMapper.getSpecialDeviceRule(devcode); @@ -523,4 +524,18 @@ } return alarmRuleValueList; } + + + @Override + public List getDevicesByCodes(List devcodes) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("DEVCODE", devcodes); + queryWrapper.eq("VALID", "1"); + return this.baseMapper.selectList(queryWrapper); + } + + @Override + public List getListByWellId(Long wellId) { + return this.baseMapper.getListByWellId(wellId); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java index 5073159..7f8bfdc 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service.impl; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -12,11 +13,8 @@ import com.casic.missiles.enums.DeviceDataEnum; import com.casic.missiles.modular.device.dao.BusDeviceMapper; import com.casic.missiles.modular.device.dao.BusLedgerPipeMapper; -import com.casic.missiles.modular.device.dto.BusLedgerPipeMonitorRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeResponseDTO; -import com.casic.missiles.modular.device.dto.MonitorDataRequestDTO; -import com.casic.missiles.modular.device.entity.BusLedgerPipe; +import com.casic.missiles.modular.device.dto.*; +import com.casic.missiles.modular.device.entity.*; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.server.CommonServer; @@ -24,11 +22,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.stream.Collectors; /** *

@@ -63,6 +60,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getPipeCode()), "PIPE_CODE", request.getPipeCode()); queryWrapper.like(ObjectUtil.isNotEmpty(request.getPosition()), "POSITION", request.getPosition()); queryWrapper.in(ObjectUtil.isNotEmpty(deptIds), "DEPTID", deptIds); + queryWrapper.eq(ObjectUtil.isNotEmpty(request.getType()), "TYPE", request.getType()); Page pipePage = this.page(page, queryWrapper); List pipeList = pipePage.getRecords(); pipeList.forEach(pipe -> { @@ -156,6 +154,12 @@ return busLedgerPipe; } + public List getList() { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("VALID", "1"); + return this.baseMapper.selectList(queryWrapper); + } + @Override public Boolean updateMonitorStatus(List tagNumbers) { UpdateWrapper updateWrapper = new UpdateWrapper<>(); @@ -163,4 +167,43 @@ updateWrapper.set("MONITOR_STATE", "3"); return this.update(updateWrapper); } + + @Transactional + @Override + public List addPositionBatch(List results) { + List list = new ArrayList<>(); + if (!CollectionUtil.isEmpty(results)) { + List busLedgerPipeList = this.getList(); + List tagCodes = busLedgerPipeList.stream().map(BusLedgerPipe::getTagNumber).collect(Collectors.toList()); + final Integer[] index = {1}; + results.forEach(busPositionImportDTO -> { + index[0]++; + //设备编号查重 + if (tagCodes.contains(busPositionImportDTO.getTagNumber())) { + list.add("第" + index[0] + "行,安装位号已存在!"); + return; + } + + }); + if (CollectionUtil.isNotEmpty(list)) { + return list; + } + List busDeviceList = BusLedgerPipe.convertDeviceList(results); + + //保存点位信息 + this.saveBatch(busDeviceList); + + } else { + list.add("导入数据不能为空"); + } + return list; + } + + @Override + public List getListByNumber(String tagNumber) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("VALID", "1"); + queryWrapper.eq("TAG_NUMBER", tagNumber); + return this.baseMapper.selectList(queryWrapper); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java index 5798675..ec2b3f5 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.modular.device.dao.SyncLogMapper; import com.casic.missiles.modular.device.entity.SyncLog; import com.casic.missiles.modular.device.service.ISyncLogDetailService; @@ -39,7 +40,8 @@ syncLog.setUpdateCount(updateCount); syncLog.setAddCount(addCount); syncLog.setDeleteCount(deleteCount); - syncLog.setCreateUser(permissionContext.getAuthService().getLoginUser().getName()); + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + syncLog.setCreateUser(null == authUser ? "admin" : authUser.getName()); return this.baseMapper.insert(syncLog) > 0 ? true : false; } diff --git a/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java index b80c202..6be2b47 100644 --- a/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java +++ b/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -1,56 +1,56 @@ -package com.casic.missiles.job.config; - -import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - - -@Slf4j -@Configuration -@Data -@ConditionalOnExpression("T(org.apache.commons.lang3.StringUtils).isNotEmpty('${xxl.job.admin.addresses}')") -public class XxlJobConfig { - @Value("${xxl.job.admin.addresses}") - private String adminAddresses; - - @Value("${xxl.job.accessToken}") - private String accessToken; - - @Value("${xxl.job.executor.appname}") - private String appname; - -// @Value("${xxl.job.executor.address}") -// private String address; - - @Value("${xxl.job.executor.ip}") - private String ip; - - @Value("${xxl.job.executor.port}") - private int port; - - @Value("${xxl.job.executor.logpath}") - private String logPath; - - @Value("${xxl.job.executor.logretentiondays}") - private int logRetentionDays; - - @Bean - public XxlJobSpringExecutor xxlJobExecutor() { - log.info(">>>>>>>>>>> xxl-job config init."); - XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); - xxlJobSpringExecutor.setAdminAddresses(adminAddresses); - xxlJobSpringExecutor.setAppname(appname); -// xxlJobSpringExecutor.setAddress(address); - xxlJobSpringExecutor.setIp(ip); - xxlJobSpringExecutor.setPort(port); - xxlJobSpringExecutor.setAccessToken(accessToken); - xxlJobSpringExecutor.setLogPath(logPath); - xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); - - return xxlJobSpringExecutor; - } -} +//package com.casic.missiles.job.config; +// +//import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +//import lombok.Data; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.beans.factory.annotation.Value; +//import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; +//import org.springframework.context.annotation.Bean; +//import org.springframework.context.annotation.Configuration; +// +// +//@Slf4j +//@Configuration +//@Data +//@ConditionalOnExpression("T(org.apache.commons.lang3.StringUtils).isNotEmpty('${xxl.job.admin.addresses}')") +//public class XxlJobConfig { +// @Value("${xxl.job.admin.addresses}") +// private String adminAddresses; +// +// @Value("${xxl.job.accessToken}") +// private String accessToken; +// +// @Value("${xxl.job.executor.appname}") +// private String appname; +// +//// @Value("${xxl.job.executor.address}") +//// private String address; +// +// @Value("${xxl.job.executor.ip}") +// private String ip; +// +// @Value("${xxl.job.executor.port}") +// private int port; +// +// @Value("${xxl.job.executor.logpath}") +// private String logPath; +// +// @Value("${xxl.job.executor.logretentiondays}") +// private int logRetentionDays; +// +// @Bean +// public XxlJobSpringExecutor xxlJobExecutor() { +// log.info(">>>>>>>>>>> xxl-job config init."); +// XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); +// xxlJobSpringExecutor.setAdminAddresses(adminAddresses); +// xxlJobSpringExecutor.setAppname(appname); +//// xxlJobSpringExecutor.setAddress(address); +// xxlJobSpringExecutor.setIp(ip); +// xxlJobSpringExecutor.setPort(port); +// xxlJobSpringExecutor.setAccessToken(accessToken); +// xxlJobSpringExecutor.setLogPath(logPath); +// xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); +// +// return xxlJobSpringExecutor; +// } +//} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java new file mode 100644 index 0000000..fc881a1 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.data.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 外协管盯 前端控制器 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RestController +@RequestMapping("/system/dataGasOther") +public class DataGasOtherController { + +} + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java new file mode 100644 index 0000000..b5f3627 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.data.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 外协管盯 Mapper 接口 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Mapper +public interface DataGasOtherMapper extends BaseMapper { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml new file mode 100644 index 0000000..8ce1455 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID, DEVCODE, WELL_CODE, WELL_NUMBER, GASVAL, VBAT, BATSTA, SIN, RSRP, SINR, UPTIME, LOGTIME, SIG, TEMP, SS_STATE + + + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java new file mode 100644 index 0000000..53972ba --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java @@ -0,0 +1,94 @@ +package com.casic.missiles.modular.data.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 外协管盯 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Builder +@Data +@TableName("data_gas_other") +@ApiModel(value = "DataGasOther对象", description = "外协管盯") +public class DataGasOther implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId("ID") + private Long id; + + @ApiModelProperty("设备编号") + @TableField("DEVCODE") + private String devcode; + + @ApiModelProperty("点位编号") + @TableField("WELL_CODE") + private String wellCode; + + @ApiModelProperty("位号") + @TableField("WELL_NUMBER") + private String wellNumber; + + @ApiModelProperty("气体浓度采样值") + @TableField("GASVAL") + private String gasval; + + @ApiModelProperty("设备电池电压值(毫伏)") + @TableField("VBAT") + private String vbat; + + @ApiModelProperty("电池状态0 正常、 1 低电告警、2 关机") + @TableField("BATSTA") + private String batsta; + + @ApiModelProperty("接收信号强度等级") + @TableField("SIN") + private String sin; + + @ApiModelProperty("接收信号参考质量 服务小 区的 RSRP 值") + @TableField("RSRP") + private String rsrp; + + @ApiModelProperty("信噪比") + @TableField("SINR") + private String sinr; + + @ApiModelProperty("采集时间") + @TableField("UPTIME") + private Date uptime; + + @ApiModelProperty("上传时间") + @TableField("LOGTIME") + private Date logtime; + + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态,0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java index 86077b8..f4d4417 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java @@ -76,4 +76,17 @@ private Date logtime; + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态:0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java new file mode 100644 index 0000000..842ca0b --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.data.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.data.entity.DataGasOther; + +/** + *

+ * 外协管盯 服务类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +public interface IDataGasOtherService extends IService { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java new file mode 100644 index 0000000..4c660e9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java @@ -0,0 +1,226 @@ +package com.casic.missiles.modular.data.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.enums.DeviceTypeEnum; +import com.casic.missiles.enums.DictEnum; +import com.casic.missiles.modular.alarm.dto.AlarmDeviceRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.AlarmRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.BusAlarmLedgerDTO; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.data.dao.DataGasMapper; +import com.casic.missiles.modular.data.dao.DataGasOtherMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import com.casic.missiles.modular.data.entity.DataTubeOther; +import com.casic.missiles.modular.data.service.IDataAbstractService; +import com.casic.missiles.modular.data.service.IDataGasOtherService; +import com.casic.missiles.modular.data.service.ITrackLogService; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Optional; + +/** + *

+ * 外协管盯 服务实现类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RequiredArgsConstructor +@Service +public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { + + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + private final DataGasMapper dataGasMapper; + private final IAlarmRecordsService alarmRecordsService; + private final IAlarmRuleService alarmRuleService; + private final ITrackLogService iTrackLogService; + private final IBusDeviceService busDeviceService; + + @Override + public void process(String dataContent) { + + //解析数据+根据业务处理存储数据 + JSONObject json = JSONObject.parseObject(dataContent); + String devCode = json.get("devCode").toString(); + JSONObject jsonObject = json.getJSONObject("mBody"); + if (mType[0].equals(json.get("mType")) || mType[3].equals(json.get("mType"))) {//存储上报数据 + this.processNormalData(jsonObject, devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + this.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.TubeOther.name().equals(json.get("devType"))) { + if ("TubeOtherConfigSuccess".equals(jsonObject.get("bType"))) { +// deviceConfigManager.updateStatus(devCode); + } + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } else if (mType[4].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); +// imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; + try { + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); + } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + } + } + + @Transactional + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.getString("cell"); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = jsonObject.getJSONArray("datas"); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + String bfcf = busDeviceService.getBfcf(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).getString("gasval"); + String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); + String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); + String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataGasOther.builder() + .wellCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .wellNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .devcode(devCode) +// .cell(cell) + .gasval(gas) + .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime))) + .logtime(new Date()) + .vbat(vbat) + .batsta(batsta) + .rsrp(rsrp) + .sin(pci) + .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) + .build());//存储采集数据 + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) continue; + + //3.清除设备告警 + alarmRecordsService.cancelDeviceAlarm(devCode); + //4.存报警 + //若没绑定井,则不产生报警 + boolean alarmFlag = false; + if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { + //获取报警规则 + List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); + for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { + if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && + Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { + alarmFlag = true; + //写入报警 + //1、判断报警是否已存在 + if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.TubeOther.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); + //7.更新管线状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java index d248540..b33a1ee 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java @@ -91,7 +91,6 @@ } - public List getBusAlarmLedgerList(String devCode) { return this.dataGasMapper.getListByDevCode(devCode); } @@ -113,6 +112,13 @@ for (int i = 0; i < jsonArray.size(); i++) { try { String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) .findFirst(); @@ -175,18 +181,18 @@ alarmRecordsService.cancelDeviceAlarm(devCode); //4.存报警 //若没绑定井,则不产生报警 - boolean alarmFlag = false; + boolean alarmFlag = false; if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { //获取报警规则 List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { - alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); } break; } @@ -197,7 +203,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及设备状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新监测井状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java index e848fce..6297093 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java @@ -84,42 +84,78 @@ } - @Transactional - public void processAlarmData(JSONObject jsonObject, String devCode) { - JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + public void processEventAlarm(String devCode, String eventTypeCode, String logTime, String eventValue) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - //获取报警事件 - List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - - List busWellDTOList = dataGasMapper.getListByDevCode(devCode); - //若没绑定井,则不产生报警 - if (busWellDTOList != null && busWellDTOList.size() > 0) { - - for (int i = 0; i < jsonArray.size(); i++) { + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + //特殊处理消警 + if ("0".equals(eventValue)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, eventTypeCode); + } + return; } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> eventTypeCode.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 - if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + if (!alarmDeviceRuleResponseDTO.isPresent()) return; //1.查询是否已存在该类报警 - if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) return; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); - - + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + } + } + } + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + try { + String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmEventCode)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } } } } @@ -169,7 +205,76 @@ .rightVibrateAlarm(VibR) .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(uptime))) .logtime(new Date()) - .build());//存储采集数据 + .build()); + + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + ruleResponseDTOList.forEach(ruleResponseDTO -> { + + if ("Sloping".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Sloping)&&(!alarmRecordsService.isWatchAlarms(devCode,"Sloping"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Sloping", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Sloping)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Sloping"); + + } + } + if ("Destroy".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Destroy)&&(!alarmRecordsService.isWatchAlarms(devCode,"Destroy"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Destroy", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Destroy)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Destroy"); + + } + } + if ("Leak".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Leak)&&(!alarmRecordsService.isWatchAlarms(devCode,"Leak"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Leak", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Leak)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Leak"); + + } + } + if ("DiscL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscL)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscL"); + + } + } + if ("DiscR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscR)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscR"); + } + } + + if ("VibL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibL)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibL"); + } + } + if ("VibR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibR)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibR"); + } + } + }); + +// //处理报警事件 +// processEventAlarm(devCode,"Sloping",uptime,Sloping); +// processEventAlarm(devCode,"Destroy",uptime,Destroy); +// processEventAlarm(devCode,"Leak",uptime,Leak); +// processEventAlarm(devCode,"DiscL",uptime,DiscL); +// processEventAlarm(devCode,"DiscR",uptime,DiscR); +// processEventAlarm(devCode,"VibL",uptime,VibL); +// processEventAlarm(devCode,"VibR",uptime,VibR); + //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -197,7 +302,7 @@ if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && gas >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), gas)) { @@ -213,7 +318,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R,alarmFlag?"燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R, alarmFlag ? "燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java index f913775..895d201 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java @@ -89,6 +89,7 @@ String bfcf = busDeviceService.getBfcf(devCode); if (DictEnum.BF_ON.equals(bfcf)) { JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); //获取报警事件 List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); List busWellDTOList = dataGasMapper.getListByDevCode(devCode); @@ -96,25 +97,43 @@ if (busWellDTOList != null && busWellDTOList.size() > 0) { for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 if (!alarmDeviceRuleResponseDTO.isPresent()) continue; //1.查询是否已存在该类报警 if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { @@ -141,6 +160,9 @@ String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); gas = String.format("%.2f", Double.valueOf(gas)); //1.存数据 save(DataTubeOther.builder() @@ -156,6 +178,9 @@ .rsrp(rsrp) .sin(pci) .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) .build());//存储采集数据 //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -186,7 +211,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 98e736b..2288075 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -216,5 +216,15 @@ public ReturnDTO syncDeviceStatus() { return ReturnUtil.success(iBusDeviceService.syncDeviceStatus()); } + + @ApiOperation("根据闸井id获取设备信息") + @PostMapping("/getListByWellId") + @ResponseBody + public ReturnDTO getListByWellId(@RequestBody IdDTO idDTO) { + Assert.isFalse(ObjectUtil.isEmpty(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iBusDeviceService.getListByWellId(idDTO.getId())); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java index 72a2d84..d6d9743 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java @@ -85,6 +85,7 @@ return ReturnUtil.success(iBusLedgerService.detail(idDTO.getId())); } + /** * 同步三级部门 * diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java index 9e412d2..4316b56 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java @@ -1,22 +1,33 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.response.ErrorResponseData; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; +import com.casic.missiles.modular.device.dto.BusPositionImportDTO; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.ReturnUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataAccessException; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; /** @@ -40,8 +51,44 @@ @PostMapping("/addPosition") @ResponseBody public ReturnDTO addPosition(@RequestBody BusLedgerPipe busLedgerPipe) { + + List busLedgerPipeList = iBusLedgerPipeService.getListByNumber(busLedgerPipe.getTagNumber()); + if(busLedgerPipeList!=null&&busLedgerPipeList.size()>0){ + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE,"安装位号已存!!!"); + } + Long id =IdUtil.getSnowflake(1,2).nextId(); + busLedgerPipe.setId(id); iBusLedgerPipeService.save(busLedgerPipe); - return ReturnUtil.success(busLedgerPipe.getId()); + return ReturnUtil.success(id); + } + + @ApiOperation("批量导入") + @RequestMapping(value = "/batchImport", method = RequestMethod.POST) + @ResponseBody + public Object batchImport(@RequestParam("file") MultipartFile file) { + List results = new ArrayList<>(); + try { + results = this.importExcel(BusPositionImportDTO.class, file, null, null); + List list = iBusLedgerPipeService.addPositionBatch(results); + if (!CollectionUtil.isEmpty(list)) { + //获取校验报错信息 + return new ErrorResponseData(list.get(0)); + } + } catch (Exception e) { + return catchMybatisPlusException(e, "导入位置信息失败"); + } + return ResponseData.success(); + } + + private ResponseData catchMybatisPlusException(Exception e, String errorMsg) { + if (e instanceof DataAccessException) { + DataAccessException mybatisPlusException = (DataAccessException) e; + String message = mybatisPlusException.getRootCause().getMessage(); + if (message.contains("Duplicate entry '")) { + return new ErrorResponseData("安装位号重复:" + message.replaceAll("Duplicate entry '", "").replaceAll("' for key 'DEVCODE'", "")); + } + } + return new ErrorResponseData(errorMsg); } @ApiOperation("编辑点位") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java index d1e08a8..d938876 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java @@ -51,6 +51,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getOperatorName()), "CREATE_USER", request.getOperatorName()); queryWrapper.ge(ObjectUtil.isNotEmpty(request.getStartTime()), "START_TIME", request.getStartTime()); queryWrapper.le(ObjectUtil.isNotEmpty(request.getEndTime()), "END_TIME", request.getEndTime()); + queryWrapper.orderByDesc("START_TIME"); return ReturnUtil.success(super.packForBT(iSyncLogService.page(page, queryWrapper))); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java index 5ee5291..23ddee9 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java @@ -73,4 +73,12 @@ " where bd.DEVCODE= #{devcode} and bd.VALID=1 " + ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD asc") List getDeviceTypeRule(@Param("devcode") String devcode); + + + @Select("SELECT bd.* from bus_device bd " + + "left JOIN bus_device_ledger bl on bd.id= bl.DEVICE_ID and bl.VALID=1 " + + "LEFT JOIN bus_ledger_all_view bv on bv.id= bl.LEDGER_ID and bv.type= bl.TYPE and bv.VALID=1 " + + "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") + List getListByWellId(@Param("wellId") Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java index e1d16c4..a4c3f7a 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java @@ -37,7 +37,7 @@ @Select("SELECT b.ORG_ID,b.ORG_CODE,b.ORG_NAME,b.PARENT_ID FROM `bus_sync_org_relation` b WHERE b.DEL_FLAG =0 and b.PARENT_ID = #{syncId} ") List synDept(@Param("syncId") String syncId); - @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view ") + @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view where VALID=1") List getBusLedgers(); @Select("SELECT DEVCODE FROM `bus_device` where VALID>0 ") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml index 99ef10b..c6d1fff 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml @@ -29,6 +29,7 @@ bp.DEVICE_MODEL as deviceModel, bt.TYPE_NAME as typeName, + bp.DATA_SERVICE as deviceCategory, bm.`NAME` as manufactureName, bl.tagNumber as tagNumber, bl.id as ledgerId, @@ -81,6 +82,10 @@ and bd.LOGTIME #{request.logTime2} + + and bp.DATA_SERVICE =#{request.deviceCategory} + + ORDER BY bd.INSTALL_DATE DESC diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml index bdadb6a..d3f4684 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml @@ -40,7 +40,7 @@ `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + AND bdl.VALID = 1 JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -99,8 +99,8 @@ bm.`NAME` as manufactureName FROM `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE - LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID and bdl.type=blp.type + AND bdl.VALID = 1 LEFT JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -117,7 +117,9 @@ WITH station_temp as(SELECT bl.ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID FROM `bus_ledger` bl where bl.VALID=1 and bl.TYPE =2) - select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME from station_temp bl + select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME,bd.DEVCODE from station_temp bl left join bus_device_ledger bdl on bdl.LEDGER_ID = bl.ID and bdl.TYPE =2 and bdl.valid=1 left join bus_device bd on bd.id= bdl.DEVICE_ID and bd.VALID=1 order by bl.ID diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml index 7b92b04..1d97c64 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml @@ -184,7 +184,7 @@ WHERE EQ_LOCNO like 'N%' and - EQ_CATEGORY in (1,3) + EQ_CATEGORY in (1,2,3,5) diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java index 859cf08..143b42d 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java @@ -23,6 +23,9 @@ @ApiModelProperty("设备类型id") private Long typeId; + @ApiModelProperty("产品名称") + private String productName; + @ApiModelProperty("指令集合") private List commandConfigList; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java index 646610b..2cb5894 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("最新上传结束时间") private String logTime2; + + @ApiModelProperty("设备类别(0:自有设备,1:数据服务)") + private String deviceCategory; } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java index 8c95537..28b30fa 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java @@ -44,6 +44,9 @@ @ExcelProperty("关联管线") private String pipeCode; + @ExcelProperty("监测类型") + private String monitorType; + private String watchObject; private Long deviceType; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java index 0980c34..ac5daf0 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java @@ -24,4 +24,7 @@ @ApiModelProperty("详细位置") private String position; + @ApiModelProperty("1:其他,3:管线") + private String type; + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java new file mode 100644 index 0000000..bce7ebd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.device.dto; + + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class BusPositionImportDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + + @ExcelProperty("管线编号") + private String pipeCode; + + @ExcelProperty("安装位号") + private String tagNumber; + + @ExcelProperty("经度(高德)") + private String lngGaode; + + @ExcelProperty("纬度(高德)") + private String latGaode; + + @ExcelProperty("详细位置") + private String position; + + @ExcelProperty("管理单位") + private Long deptid; + + @ExcelProperty("位置类别") + private String type; + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java index 58faa0e..d72ae78 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java @@ -16,13 +16,13 @@ private String deviceId; //移动命令:left right up down left_up left_down right_up right_down GOTO_PRESET - @ApiModelProperty("移动命令") + @ApiModelProperty("移动命令(left right up down left_up left_down right_up right_down)") private String command; - @ApiModelProperty("速度") + @ApiModelProperty("速度,一般传100") private String speed; - @ApiModelProperty("启停命令") + @ApiModelProperty("启停命令(0:开始,1:结束)") private String cameraAction; @ApiModelProperty("预置点编号") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java index b4ec73c..5a3d0b0 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java @@ -66,7 +66,7 @@ private String powerSupplyMode; - @ApiModelProperty("是否结束数据服务") + @ApiModelProperty("是否结束数据服务(1:是,0:否)") @TableField("DATA_SERVICE") private String dataService; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java index 1184995..407e3c1 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java @@ -193,10 +193,14 @@ @TableField(exist = false) private String bfztName; + @ApiModelProperty("设备类别(0:自有设备,1:数据服务)") + @TableField(exist = false) + private String deviceCategory; + public BusDevice() { } - public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds) { + public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds, String monitorType) { this.devcode = devcode; this.deviceType = deviceType; this.productId = productId; @@ -204,6 +208,7 @@ this.installDate = installDate; this.watchObject = watchObject; this.ledgerIds = ledgerIds; + this.monitorType = monitorType; } public static List convertDeviceList(List dtoList) { @@ -227,7 +232,8 @@ deviceImportDTO.getValid(), deviceImportDTO.getInstallDate(), deviceImportDTO.getWatchObject(), - deviceImportDTO.getLedgerIds())); + deviceImportDTO.getLedgerIds(), + deviceImportDTO.getMonitorType())); }); return busDeviceList; } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java index 12b52de..1ac8455 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java @@ -1,16 +1,20 @@ package com.casic.missiles.modular.device.entity; +import cn.hutool.core.util.IdUtil; 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 com.casic.missiles.modular.device.dto.BusPositionImportDTO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import java.io.Serializable; +import java.util.ArrayList; import java.util.Date; +import java.util.List; /** *

@@ -29,7 +33,7 @@ private static final long serialVersionUID = 1L; @ApiModelProperty("主键") - @TableId(value = "ID", type = IdType.AUTO) +// @TableId(value = "ID", type = IdType.AUTO) private Long id; @ApiModelProperty("编号") @@ -60,6 +64,10 @@ @TableField("DEPTID") private Long deptid; + @ApiModelProperty("类别(1:其他,3:管线)") + @TableField("`TYPE`") + private String type; + @ApiModelProperty("责任部门") @TableField("RESPONSIBLE_DEPT") private Long responsibleDept; @@ -110,9 +118,10 @@ public BusLedgerPipe() { } - public BusLedgerPipe(String pipeCode, String ledgerName, String tagNumber, + public BusLedgerPipe(Long id,String pipeCode, String ledgerName, String tagNumber, String lngGaode, String latGaode, String position, - Long deptid, String devcode) { + Long deptid, String devcode, String type) { + this.id=id; this.pipeCode = pipeCode; this.ledgerName = ledgerName; this.tagNumber = tagNumber; @@ -121,5 +130,26 @@ this.position = position; this.deptid = deptid; this.devcode = devcode; + this.type = type; } + + public static List convertDeviceList(List dtoList) { + + + List busDeviceList = new ArrayList<>(); + dtoList.forEach(positionImportDTO -> { + + busDeviceList.add(new BusLedgerPipe(IdUtil.getSnowflake(1,2).nextId(),positionImportDTO.getPipeCode(), + positionImportDTO.getTagNumber(), + positionImportDTO.getTagNumber(), + positionImportDTO.getLngGaode(), + positionImportDTO.getLatGaode(), + positionImportDTO.getPosition(), + positionImportDTO.getDeptid(), + "", + positionImportDTO.getType())); + }); + return busDeviceList; + } + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java index aaaa409..63c0576 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java @@ -52,4 +52,8 @@ List getDeviceRule(String devcode); + List getDevicesByCodes(List devcodes); + + List getListByWellId(Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java index 14f6a93..8692383 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java @@ -2,11 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; -import com.casic.missiles.core.datascope.DataScope; -import com.casic.missiles.modular.device.dto.BusLedgerPipeMonitorRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeResponseDTO; -import com.casic.missiles.modular.device.dto.MonitorDataRequestDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import java.util.List; @@ -26,17 +22,21 @@ Page monitorPipePageList(Page page, BusLedgerPipeMonitorRequestDTO request); - BusLedgerPipeResponseDTO detail(Long id,String devcode); + BusLedgerPipeResponseDTO detail(Long id, String devcode); - List> watchDataByPipe(MonitorDataRequestDTO requestDTO); + List> watchDataByPipe(MonitorDataRequestDTO requestDTO); - List> pipeList(); + List> pipeList(); - List> deviceList(); + List> deviceList(); BusLedgerPipe saveBusLedgerPipe(BusLedgerPipe busLedgerPipe); Boolean updateMonitorStatus(List tagNumbers); + List addPositionBatch(List results); + + List getListByNumber(String tagNumber); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java index 66ed812..ad72230 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java @@ -12,9 +12,12 @@ import com.casic.missiles.modular.device.dto.BusConfigOtherDTO; import com.casic.missiles.modular.device.dto.BusConfigRequestDTO; import com.casic.missiles.modular.device.entity.BusConfig; +import com.casic.missiles.modular.device.entity.BusDevice; import com.casic.missiles.modular.device.service.IBusConfigService; +import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.HttpClientUtils; import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -22,6 +25,9 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.LinkedBlockingDeque; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; /** *

@@ -36,6 +42,11 @@ public class BusConfigServiceImpl extends ServiceImpl implements IBusConfigService { private final AbstractPermissionContext abstractPermissionContext; + private final IBusDeviceService iBusDeviceService; + private final ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(3, 6, 60, TimeUnit.SECONDS, new LinkedBlockingDeque<>(10)); + + @Value("${casic.brSendConfigUrl}") + private String brSendConfigUrl; @Transactional @Override @@ -105,6 +116,42 @@ .operator(user != null ? user.getId() : null) .operatorName(user != null ? user.getName() : "").build()); }); + + + threadPoolExecutor.execute( + () -> { + //发送第三方下发: + if (busConfigOtherDTO.getProductName().contains("管网哨兵")) { + List busDeviceList = iBusDeviceService.getDevicesByCodes(devcodes); + for (BusDevice busDevice : busDeviceList) { + if (ObjectUtil.isAllNotEmpty(busDevice.getNbProductId(), busDevice.getNbDeviceId())) { + Map commandMap = new HashMap<>(); + commandMap.put("productId", busDevice.getNbProductId()); + commandMap.put("devCode", busDevice.getDevcode()); + commandMap.put("deviceId", busDevice.getNbDeviceId()); + commandMap.put("cmdList", busConfigOtherDTO.getCommandConfigList()); + HttpClientUtils.post(brSendConfigUrl+"/tube/config/send", JSON.toJSONString(commandMap)); + } + } + } else if (busConfigOtherDTO.getProductName().contains("智能警示桩")) { + + List busDeviceList = iBusDeviceService.getDevicesByCodes(devcodes); + for (BusDevice busDevice : busDeviceList) { + if (ObjectUtil.isAllNotEmpty(busDevice.getNbProductId(), busDevice.getNbDeviceId())) { + Map commandMap = new HashMap<>(); + commandMap.put("productId", busDevice.getNbProductId()); + commandMap.put("devCode", busDevice.getDevcode()); + commandMap.put("deviceId", busDevice.getNbDeviceId()); + commandMap.put("cmdList", busConfigOtherDTO.getCommandConfigList()); + HttpClientUtils.post(brSendConfigUrl+"/sentinel/config/send", JSON.toJSONString(commandMap)); + } + } + + } + } + ); + + return this.saveBatch(busConfigs); // List> mapList = new ArrayList<>(); // Map commandMap = new HashMap<>(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java index 60d15e5..bae6902 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java @@ -3,6 +3,7 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -80,6 +81,7 @@ @Override public Page listPage(Page page, BusDeviceDTO request) { + page.setOptimizeCountSql(false); Page busDevicePage = this.baseMapper.pageList(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List busDeviceList = busDevicePage.getRecords(); busDeviceList.forEach(busDevice -> { @@ -227,7 +229,7 @@ if (deviceDataEnum.getTableColumns().contains("cell")) { String[] queryColumns = deviceDataEnum.getQueryColumns().split(",", 4); resultMap = this.baseMapper.cellAnalysis(deviceDataEnum.getTableName(), - "cell,uptime", + deviceDataEnum.getCellColumn(), queryColumns[0], queryColumns[1], deviceDataEnum.getOrderColumn(), @@ -265,14 +267,13 @@ } else { List busDeviceLedgers = busDeviceLedgerService.getListByDeviceId(busDevice.getId()); //没绑定关系,先绑定 - if (ObjectUtil.isNotEmpty(busDeviceLedgers)) { + if (busDeviceLedgers == null || busDeviceLedgers.size() < 1) { busDeviceLedgerService.saveDeviceLedger(busDevice.getId(), busDevice.getLedgerIds(), busDevice.getWatchObject()); } else { //已绑定,判断是否位置变了 List ledgerIdsPre = busDeviceLedgers.stream().map(BusDeviceLedger::getLedgerId).collect(Collectors.toList()); if (ledgerIds.containsAll(ledgerIdsPre) && ledgerIdsPre.containsAll(ledgerIds)) { } else { - busDeviceLedgerService.deleteDeviceLedgers(Arrays.asList(busDevice.getId())); busDeviceLedgerService.saveDeviceLedger(busDevice.getId(), busDevice.getLedgerIds(), busDevice.getWatchObject()); } } @@ -304,6 +305,8 @@ List codeList = iBusLedgerService.getCodeLists(); //获取管线编号 List pipeCodeList = iBusLedgerService.getPipeCodeList(); + List pipeList = new ArrayList<>(); + final Integer[] index = {1}; results.forEach(deviceImportDTO -> { index[0]++; @@ -357,22 +360,16 @@ return; } //新增点位 - if ("3".equals(deviceImportDTO.getWatchObject())) { + if ("3".equals(deviceImportDTO.getWatchObject()) || "1".equals(deviceImportDTO.getWatchObject())) { //toDo:安装位号一致,入一次即可 //为管线 - BusLedgerPipe busLedgerPipe = new BusLedgerPipe(deviceImportDTO.getPipeCode(), deviceImportDTO.getTagNumber(), + Long pipeLedgerId = IdUtil.getSnowflake(1, 2).nextId(); + BusLedgerPipe busLedgerPipe = new BusLedgerPipe(pipeLedgerId, deviceImportDTO.getPipeCode(), deviceImportDTO.getTagNumber(), deviceImportDTO.getTagNumber(), deviceImportDTO.getLng(), deviceImportDTO.getLat(), - deviceImportDTO.getPosition(), deviceImportDTO.getDeptid(), deviceImportDTO.getDevCode()); - busLedgerPipe = iBusLedgerPipeService.saveBusLedgerPipe(busLedgerPipe); - deviceImportDTO.setLedgerIds(Arrays.asList(busLedgerPipe.getId())); - }else if("1".equals(deviceImportDTO.getWatchObject())){ - //新增闸井 - BusLedger busLedger = new BusLedger(deviceImportDTO.getTagNumber(), - deviceImportDTO.getTagNumber(),deviceImportDTO.getTagNumber(), - deviceImportDTO.getLng(),deviceImportDTO.getLat(),deviceImportDTO.getPosition(), - deviceImportDTO.getDeptid()); - this.iBusLedgerService.save(busLedger); - deviceImportDTO.setLedgerIds(Arrays.asList(busLedger.getId())); + deviceImportDTO.getPosition(), deviceImportDTO.getDeptid(), deviceImportDTO.getDevCode(), deviceImportDTO.getWatchObject()); +// busLedgerPipe = iBusLedgerPipeService.saveBusLedgerPipe(busLedgerPipe); + pipeList.add(busLedgerPipe); + deviceImportDTO.setLedgerIds(Arrays.asList(pipeLedgerId)); } } @@ -383,6 +380,10 @@ return list; } + if (pipeList != null && pipeList.size() > 0) { + iBusLedgerPipeService.saveBatch(pipeList); + } + List busDeviceList = BusDevice.convertDeviceList(results); //保存设备信息 @@ -514,7 +515,7 @@ } -// @Cacheable(value = "alarmRuleCache", key = "#devcode") + // @Cacheable(value = "alarmRuleCache", key = "#devcode") @Override public List getDeviceRule(String devcode) { List alarmRuleValueList = this.baseMapper.getSpecialDeviceRule(devcode); @@ -523,4 +524,18 @@ } return alarmRuleValueList; } + + + @Override + public List getDevicesByCodes(List devcodes) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("DEVCODE", devcodes); + queryWrapper.eq("VALID", "1"); + return this.baseMapper.selectList(queryWrapper); + } + + @Override + public List getListByWellId(Long wellId) { + return this.baseMapper.getListByWellId(wellId); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java index 5073159..7f8bfdc 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service.impl; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -12,11 +13,8 @@ import com.casic.missiles.enums.DeviceDataEnum; import com.casic.missiles.modular.device.dao.BusDeviceMapper; import com.casic.missiles.modular.device.dao.BusLedgerPipeMapper; -import com.casic.missiles.modular.device.dto.BusLedgerPipeMonitorRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeResponseDTO; -import com.casic.missiles.modular.device.dto.MonitorDataRequestDTO; -import com.casic.missiles.modular.device.entity.BusLedgerPipe; +import com.casic.missiles.modular.device.dto.*; +import com.casic.missiles.modular.device.entity.*; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.server.CommonServer; @@ -24,11 +22,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.stream.Collectors; /** *

@@ -63,6 +60,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getPipeCode()), "PIPE_CODE", request.getPipeCode()); queryWrapper.like(ObjectUtil.isNotEmpty(request.getPosition()), "POSITION", request.getPosition()); queryWrapper.in(ObjectUtil.isNotEmpty(deptIds), "DEPTID", deptIds); + queryWrapper.eq(ObjectUtil.isNotEmpty(request.getType()), "TYPE", request.getType()); Page pipePage = this.page(page, queryWrapper); List pipeList = pipePage.getRecords(); pipeList.forEach(pipe -> { @@ -156,6 +154,12 @@ return busLedgerPipe; } + public List getList() { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("VALID", "1"); + return this.baseMapper.selectList(queryWrapper); + } + @Override public Boolean updateMonitorStatus(List tagNumbers) { UpdateWrapper updateWrapper = new UpdateWrapper<>(); @@ -163,4 +167,43 @@ updateWrapper.set("MONITOR_STATE", "3"); return this.update(updateWrapper); } + + @Transactional + @Override + public List addPositionBatch(List results) { + List list = new ArrayList<>(); + if (!CollectionUtil.isEmpty(results)) { + List busLedgerPipeList = this.getList(); + List tagCodes = busLedgerPipeList.stream().map(BusLedgerPipe::getTagNumber).collect(Collectors.toList()); + final Integer[] index = {1}; + results.forEach(busPositionImportDTO -> { + index[0]++; + //设备编号查重 + if (tagCodes.contains(busPositionImportDTO.getTagNumber())) { + list.add("第" + index[0] + "行,安装位号已存在!"); + return; + } + + }); + if (CollectionUtil.isNotEmpty(list)) { + return list; + } + List busDeviceList = BusLedgerPipe.convertDeviceList(results); + + //保存点位信息 + this.saveBatch(busDeviceList); + + } else { + list.add("导入数据不能为空"); + } + return list; + } + + @Override + public List getListByNumber(String tagNumber) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("VALID", "1"); + queryWrapper.eq("TAG_NUMBER", tagNumber); + return this.baseMapper.selectList(queryWrapper); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java index 5798675..ec2b3f5 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.modular.device.dao.SyncLogMapper; import com.casic.missiles.modular.device.entity.SyncLog; import com.casic.missiles.modular.device.service.ISyncLogDetailService; @@ -39,7 +40,8 @@ syncLog.setUpdateCount(updateCount); syncLog.setAddCount(addCount); syncLog.setDeleteCount(deleteCount); - syncLog.setCreateUser(permissionContext.getAuthService().getLoginUser().getName()); + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + syncLog.setCreateUser(null == authUser ? "admin" : authUser.getName()); return this.baseMapper.insert(syncLog) > 0 ? true : false; } diff --git a/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java index b80c202..6be2b47 100644 --- a/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java +++ b/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -1,56 +1,56 @@ -package com.casic.missiles.job.config; - -import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - - -@Slf4j -@Configuration -@Data -@ConditionalOnExpression("T(org.apache.commons.lang3.StringUtils).isNotEmpty('${xxl.job.admin.addresses}')") -public class XxlJobConfig { - @Value("${xxl.job.admin.addresses}") - private String adminAddresses; - - @Value("${xxl.job.accessToken}") - private String accessToken; - - @Value("${xxl.job.executor.appname}") - private String appname; - -// @Value("${xxl.job.executor.address}") -// private String address; - - @Value("${xxl.job.executor.ip}") - private String ip; - - @Value("${xxl.job.executor.port}") - private int port; - - @Value("${xxl.job.executor.logpath}") - private String logPath; - - @Value("${xxl.job.executor.logretentiondays}") - private int logRetentionDays; - - @Bean - public XxlJobSpringExecutor xxlJobExecutor() { - log.info(">>>>>>>>>>> xxl-job config init."); - XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); - xxlJobSpringExecutor.setAdminAddresses(adminAddresses); - xxlJobSpringExecutor.setAppname(appname); -// xxlJobSpringExecutor.setAddress(address); - xxlJobSpringExecutor.setIp(ip); - xxlJobSpringExecutor.setPort(port); - xxlJobSpringExecutor.setAccessToken(accessToken); - xxlJobSpringExecutor.setLogPath(logPath); - xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); - - return xxlJobSpringExecutor; - } -} +//package com.casic.missiles.job.config; +// +//import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +//import lombok.Data; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.beans.factory.annotation.Value; +//import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; +//import org.springframework.context.annotation.Bean; +//import org.springframework.context.annotation.Configuration; +// +// +//@Slf4j +//@Configuration +//@Data +//@ConditionalOnExpression("T(org.apache.commons.lang3.StringUtils).isNotEmpty('${xxl.job.admin.addresses}')") +//public class XxlJobConfig { +// @Value("${xxl.job.admin.addresses}") +// private String adminAddresses; +// +// @Value("${xxl.job.accessToken}") +// private String accessToken; +// +// @Value("${xxl.job.executor.appname}") +// private String appname; +// +//// @Value("${xxl.job.executor.address}") +//// private String address; +// +// @Value("${xxl.job.executor.ip}") +// private String ip; +// +// @Value("${xxl.job.executor.port}") +// private int port; +// +// @Value("${xxl.job.executor.logpath}") +// private String logPath; +// +// @Value("${xxl.job.executor.logretentiondays}") +// private int logRetentionDays; +// +// @Bean +// public XxlJobSpringExecutor xxlJobExecutor() { +// log.info(">>>>>>>>>>> xxl-job config init."); +// XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); +// xxlJobSpringExecutor.setAdminAddresses(adminAddresses); +// xxlJobSpringExecutor.setAppname(appname); +//// xxlJobSpringExecutor.setAddress(address); +// xxlJobSpringExecutor.setIp(ip); +// xxlJobSpringExecutor.setPort(port); +// xxlJobSpringExecutor.setAccessToken(accessToken); +// xxlJobSpringExecutor.setLogPath(logPath); +// xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); +// +// return xxlJobSpringExecutor; +// } +//} diff --git a/casic-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java index 798424c..3785003 100644 --- a/casic-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java +++ b/casic-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -1,37 +1,37 @@ -package com.casic.missiles.job.handler; - - -import com.xxl.job.core.biz.model.ReturnT; -import com.xxl.job.core.context.XxlJobHelper; -import com.xxl.job.core.handler.annotation.XxlJob; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; - -/** - * XxlJob开发示例(Bean模式) - * - * 开发步骤: - * 1、任务开发:在Spring Bean实例中,开发Job方法; - * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 - * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; - * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; - */ -@Slf4j -@Component -public class DemoJobHandler { - - @XxlJob(value = "demoHandler") - public ReturnT execute(String param) throws Exception { - System.out.println("调度任务Demo执行"); - XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); - -// for (int i = 0; i < 5; i++) { -// XxlJobLogger.log("beat at:" + i); -// TimeUnit.SECONDS.sleep(2); -// } - return SUCCESS; - } - -} +//package com.casic.missiles.job.handler; +// +// +//import com.xxl.job.core.biz.model.ReturnT; +//import com.xxl.job.core.context.XxlJobHelper; +//import com.xxl.job.core.handler.annotation.XxlJob; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.stereotype.Component; +// +//import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; +// +///** +// * XxlJob开发示例(Bean模式) +// * +// * 开发步骤: +// * 1、任务开发:在Spring Bean实例中,开发Job方法; +// * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 +// * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; +// * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; +// */ +//@Slf4j +//@Component +//public class DemoJobHandler { +// +// @XxlJob(value = "demoHandler") +// public ReturnT execute(String param) throws Exception { +// System.out.println("调度任务Demo执行"); +// XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); +// +//// for (int i = 0; i < 5; i++) { +//// XxlJobLogger.log("beat at:" + i); +//// TimeUnit.SECONDS.sleep(2); +//// } +// return SUCCESS; +// } +// +//} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java new file mode 100644 index 0000000..fc881a1 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.data.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 外协管盯 前端控制器 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RestController +@RequestMapping("/system/dataGasOther") +public class DataGasOtherController { + +} + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java new file mode 100644 index 0000000..b5f3627 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.data.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 外协管盯 Mapper 接口 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Mapper +public interface DataGasOtherMapper extends BaseMapper { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml new file mode 100644 index 0000000..8ce1455 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID, DEVCODE, WELL_CODE, WELL_NUMBER, GASVAL, VBAT, BATSTA, SIN, RSRP, SINR, UPTIME, LOGTIME, SIG, TEMP, SS_STATE + + + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java new file mode 100644 index 0000000..53972ba --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java @@ -0,0 +1,94 @@ +package com.casic.missiles.modular.data.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 外协管盯 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Builder +@Data +@TableName("data_gas_other") +@ApiModel(value = "DataGasOther对象", description = "外协管盯") +public class DataGasOther implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId("ID") + private Long id; + + @ApiModelProperty("设备编号") + @TableField("DEVCODE") + private String devcode; + + @ApiModelProperty("点位编号") + @TableField("WELL_CODE") + private String wellCode; + + @ApiModelProperty("位号") + @TableField("WELL_NUMBER") + private String wellNumber; + + @ApiModelProperty("气体浓度采样值") + @TableField("GASVAL") + private String gasval; + + @ApiModelProperty("设备电池电压值(毫伏)") + @TableField("VBAT") + private String vbat; + + @ApiModelProperty("电池状态0 正常、 1 低电告警、2 关机") + @TableField("BATSTA") + private String batsta; + + @ApiModelProperty("接收信号强度等级") + @TableField("SIN") + private String sin; + + @ApiModelProperty("接收信号参考质量 服务小 区的 RSRP 值") + @TableField("RSRP") + private String rsrp; + + @ApiModelProperty("信噪比") + @TableField("SINR") + private String sinr; + + @ApiModelProperty("采集时间") + @TableField("UPTIME") + private Date uptime; + + @ApiModelProperty("上传时间") + @TableField("LOGTIME") + private Date logtime; + + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态,0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java index 86077b8..f4d4417 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java @@ -76,4 +76,17 @@ private Date logtime; + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态:0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java new file mode 100644 index 0000000..842ca0b --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.data.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.data.entity.DataGasOther; + +/** + *

+ * 外协管盯 服务类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +public interface IDataGasOtherService extends IService { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java new file mode 100644 index 0000000..4c660e9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java @@ -0,0 +1,226 @@ +package com.casic.missiles.modular.data.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.enums.DeviceTypeEnum; +import com.casic.missiles.enums.DictEnum; +import com.casic.missiles.modular.alarm.dto.AlarmDeviceRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.AlarmRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.BusAlarmLedgerDTO; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.data.dao.DataGasMapper; +import com.casic.missiles.modular.data.dao.DataGasOtherMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import com.casic.missiles.modular.data.entity.DataTubeOther; +import com.casic.missiles.modular.data.service.IDataAbstractService; +import com.casic.missiles.modular.data.service.IDataGasOtherService; +import com.casic.missiles.modular.data.service.ITrackLogService; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Optional; + +/** + *

+ * 外协管盯 服务实现类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RequiredArgsConstructor +@Service +public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { + + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + private final DataGasMapper dataGasMapper; + private final IAlarmRecordsService alarmRecordsService; + private final IAlarmRuleService alarmRuleService; + private final ITrackLogService iTrackLogService; + private final IBusDeviceService busDeviceService; + + @Override + public void process(String dataContent) { + + //解析数据+根据业务处理存储数据 + JSONObject json = JSONObject.parseObject(dataContent); + String devCode = json.get("devCode").toString(); + JSONObject jsonObject = json.getJSONObject("mBody"); + if (mType[0].equals(json.get("mType")) || mType[3].equals(json.get("mType"))) {//存储上报数据 + this.processNormalData(jsonObject, devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + this.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.TubeOther.name().equals(json.get("devType"))) { + if ("TubeOtherConfigSuccess".equals(jsonObject.get("bType"))) { +// deviceConfigManager.updateStatus(devCode); + } + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } else if (mType[4].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); +// imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; + try { + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); + } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + } + } + + @Transactional + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.getString("cell"); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = jsonObject.getJSONArray("datas"); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + String bfcf = busDeviceService.getBfcf(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).getString("gasval"); + String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); + String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); + String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataGasOther.builder() + .wellCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .wellNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .devcode(devCode) +// .cell(cell) + .gasval(gas) + .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime))) + .logtime(new Date()) + .vbat(vbat) + .batsta(batsta) + .rsrp(rsrp) + .sin(pci) + .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) + .build());//存储采集数据 + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) continue; + + //3.清除设备告警 + alarmRecordsService.cancelDeviceAlarm(devCode); + //4.存报警 + //若没绑定井,则不产生报警 + boolean alarmFlag = false; + if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { + //获取报警规则 + List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); + for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { + if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && + Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { + alarmFlag = true; + //写入报警 + //1、判断报警是否已存在 + if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.TubeOther.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); + //7.更新管线状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java index d248540..b33a1ee 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java @@ -91,7 +91,6 @@ } - public List getBusAlarmLedgerList(String devCode) { return this.dataGasMapper.getListByDevCode(devCode); } @@ -113,6 +112,13 @@ for (int i = 0; i < jsonArray.size(); i++) { try { String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) .findFirst(); @@ -175,18 +181,18 @@ alarmRecordsService.cancelDeviceAlarm(devCode); //4.存报警 //若没绑定井,则不产生报警 - boolean alarmFlag = false; + boolean alarmFlag = false; if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { //获取报警规则 List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { - alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); } break; } @@ -197,7 +203,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及设备状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新监测井状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java index e848fce..6297093 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java @@ -84,42 +84,78 @@ } - @Transactional - public void processAlarmData(JSONObject jsonObject, String devCode) { - JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + public void processEventAlarm(String devCode, String eventTypeCode, String logTime, String eventValue) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - //获取报警事件 - List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - - List busWellDTOList = dataGasMapper.getListByDevCode(devCode); - //若没绑定井,则不产生报警 - if (busWellDTOList != null && busWellDTOList.size() > 0) { - - for (int i = 0; i < jsonArray.size(); i++) { + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + //特殊处理消警 + if ("0".equals(eventValue)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, eventTypeCode); + } + return; } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> eventTypeCode.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 - if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + if (!alarmDeviceRuleResponseDTO.isPresent()) return; //1.查询是否已存在该类报警 - if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) return; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); - - + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + } + } + } + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + try { + String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmEventCode)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } } } } @@ -169,7 +205,76 @@ .rightVibrateAlarm(VibR) .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(uptime))) .logtime(new Date()) - .build());//存储采集数据 + .build()); + + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + ruleResponseDTOList.forEach(ruleResponseDTO -> { + + if ("Sloping".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Sloping)&&(!alarmRecordsService.isWatchAlarms(devCode,"Sloping"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Sloping", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Sloping)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Sloping"); + + } + } + if ("Destroy".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Destroy)&&(!alarmRecordsService.isWatchAlarms(devCode,"Destroy"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Destroy", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Destroy)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Destroy"); + + } + } + if ("Leak".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Leak)&&(!alarmRecordsService.isWatchAlarms(devCode,"Leak"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Leak", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Leak)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Leak"); + + } + } + if ("DiscL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscL)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscL"); + + } + } + if ("DiscR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscR)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscR"); + } + } + + if ("VibL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibL)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibL"); + } + } + if ("VibR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibR)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibR"); + } + } + }); + +// //处理报警事件 +// processEventAlarm(devCode,"Sloping",uptime,Sloping); +// processEventAlarm(devCode,"Destroy",uptime,Destroy); +// processEventAlarm(devCode,"Leak",uptime,Leak); +// processEventAlarm(devCode,"DiscL",uptime,DiscL); +// processEventAlarm(devCode,"DiscR",uptime,DiscR); +// processEventAlarm(devCode,"VibL",uptime,VibL); +// processEventAlarm(devCode,"VibR",uptime,VibR); + //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -197,7 +302,7 @@ if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && gas >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), gas)) { @@ -213,7 +318,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R,alarmFlag?"燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R, alarmFlag ? "燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java index f913775..895d201 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java @@ -89,6 +89,7 @@ String bfcf = busDeviceService.getBfcf(devCode); if (DictEnum.BF_ON.equals(bfcf)) { JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); //获取报警事件 List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); List busWellDTOList = dataGasMapper.getListByDevCode(devCode); @@ -96,25 +97,43 @@ if (busWellDTOList != null && busWellDTOList.size() > 0) { for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 if (!alarmDeviceRuleResponseDTO.isPresent()) continue; //1.查询是否已存在该类报警 if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { @@ -141,6 +160,9 @@ String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); gas = String.format("%.2f", Double.valueOf(gas)); //1.存数据 save(DataTubeOther.builder() @@ -156,6 +178,9 @@ .rsrp(rsrp) .sin(pci) .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) .build());//存储采集数据 //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -186,7 +211,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 98e736b..2288075 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -216,5 +216,15 @@ public ReturnDTO syncDeviceStatus() { return ReturnUtil.success(iBusDeviceService.syncDeviceStatus()); } + + @ApiOperation("根据闸井id获取设备信息") + @PostMapping("/getListByWellId") + @ResponseBody + public ReturnDTO getListByWellId(@RequestBody IdDTO idDTO) { + Assert.isFalse(ObjectUtil.isEmpty(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iBusDeviceService.getListByWellId(idDTO.getId())); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java index 72a2d84..d6d9743 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java @@ -85,6 +85,7 @@ return ReturnUtil.success(iBusLedgerService.detail(idDTO.getId())); } + /** * 同步三级部门 * diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java index 9e412d2..4316b56 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java @@ -1,22 +1,33 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.response.ErrorResponseData; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; +import com.casic.missiles.modular.device.dto.BusPositionImportDTO; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.ReturnUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataAccessException; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; /** @@ -40,8 +51,44 @@ @PostMapping("/addPosition") @ResponseBody public ReturnDTO addPosition(@RequestBody BusLedgerPipe busLedgerPipe) { + + List busLedgerPipeList = iBusLedgerPipeService.getListByNumber(busLedgerPipe.getTagNumber()); + if(busLedgerPipeList!=null&&busLedgerPipeList.size()>0){ + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE,"安装位号已存!!!"); + } + Long id =IdUtil.getSnowflake(1,2).nextId(); + busLedgerPipe.setId(id); iBusLedgerPipeService.save(busLedgerPipe); - return ReturnUtil.success(busLedgerPipe.getId()); + return ReturnUtil.success(id); + } + + @ApiOperation("批量导入") + @RequestMapping(value = "/batchImport", method = RequestMethod.POST) + @ResponseBody + public Object batchImport(@RequestParam("file") MultipartFile file) { + List results = new ArrayList<>(); + try { + results = this.importExcel(BusPositionImportDTO.class, file, null, null); + List list = iBusLedgerPipeService.addPositionBatch(results); + if (!CollectionUtil.isEmpty(list)) { + //获取校验报错信息 + return new ErrorResponseData(list.get(0)); + } + } catch (Exception e) { + return catchMybatisPlusException(e, "导入位置信息失败"); + } + return ResponseData.success(); + } + + private ResponseData catchMybatisPlusException(Exception e, String errorMsg) { + if (e instanceof DataAccessException) { + DataAccessException mybatisPlusException = (DataAccessException) e; + String message = mybatisPlusException.getRootCause().getMessage(); + if (message.contains("Duplicate entry '")) { + return new ErrorResponseData("安装位号重复:" + message.replaceAll("Duplicate entry '", "").replaceAll("' for key 'DEVCODE'", "")); + } + } + return new ErrorResponseData(errorMsg); } @ApiOperation("编辑点位") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java index d1e08a8..d938876 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java @@ -51,6 +51,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getOperatorName()), "CREATE_USER", request.getOperatorName()); queryWrapper.ge(ObjectUtil.isNotEmpty(request.getStartTime()), "START_TIME", request.getStartTime()); queryWrapper.le(ObjectUtil.isNotEmpty(request.getEndTime()), "END_TIME", request.getEndTime()); + queryWrapper.orderByDesc("START_TIME"); return ReturnUtil.success(super.packForBT(iSyncLogService.page(page, queryWrapper))); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java index 5ee5291..23ddee9 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java @@ -73,4 +73,12 @@ " where bd.DEVCODE= #{devcode} and bd.VALID=1 " + ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD asc") List getDeviceTypeRule(@Param("devcode") String devcode); + + + @Select("SELECT bd.* from bus_device bd " + + "left JOIN bus_device_ledger bl on bd.id= bl.DEVICE_ID and bl.VALID=1 " + + "LEFT JOIN bus_ledger_all_view bv on bv.id= bl.LEDGER_ID and bv.type= bl.TYPE and bv.VALID=1 " + + "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") + List getListByWellId(@Param("wellId") Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java index e1d16c4..a4c3f7a 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java @@ -37,7 +37,7 @@ @Select("SELECT b.ORG_ID,b.ORG_CODE,b.ORG_NAME,b.PARENT_ID FROM `bus_sync_org_relation` b WHERE b.DEL_FLAG =0 and b.PARENT_ID = #{syncId} ") List synDept(@Param("syncId") String syncId); - @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view ") + @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view where VALID=1") List getBusLedgers(); @Select("SELECT DEVCODE FROM `bus_device` where VALID>0 ") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml index 99ef10b..c6d1fff 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml @@ -29,6 +29,7 @@ bp.DEVICE_MODEL as deviceModel, bt.TYPE_NAME as typeName, + bp.DATA_SERVICE as deviceCategory, bm.`NAME` as manufactureName, bl.tagNumber as tagNumber, bl.id as ledgerId, @@ -81,6 +82,10 @@ and bd.LOGTIME #{request.logTime2} + + and bp.DATA_SERVICE =#{request.deviceCategory} + + ORDER BY bd.INSTALL_DATE DESC diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml index bdadb6a..d3f4684 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml @@ -40,7 +40,7 @@ `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + AND bdl.VALID = 1 JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -99,8 +99,8 @@ bm.`NAME` as manufactureName FROM `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE - LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID and bdl.type=blp.type + AND bdl.VALID = 1 LEFT JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -117,7 +117,9 @@ WITH station_temp as(SELECT bl.ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID FROM `bus_ledger` bl where bl.VALID=1 and bl.TYPE =2) - select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME from station_temp bl + select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME,bd.DEVCODE from station_temp bl left join bus_device_ledger bdl on bdl.LEDGER_ID = bl.ID and bdl.TYPE =2 and bdl.valid=1 left join bus_device bd on bd.id= bdl.DEVICE_ID and bd.VALID=1 order by bl.ID diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml index 7b92b04..1d97c64 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml @@ -184,7 +184,7 @@ WHERE EQ_LOCNO like 'N%' and - EQ_CATEGORY in (1,3) + EQ_CATEGORY in (1,2,3,5) diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java index 859cf08..143b42d 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java @@ -23,6 +23,9 @@ @ApiModelProperty("设备类型id") private Long typeId; + @ApiModelProperty("产品名称") + private String productName; + @ApiModelProperty("指令集合") private List commandConfigList; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java index 646610b..2cb5894 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("最新上传结束时间") private String logTime2; + + @ApiModelProperty("设备类别(0:自有设备,1:数据服务)") + private String deviceCategory; } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java index 8c95537..28b30fa 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java @@ -44,6 +44,9 @@ @ExcelProperty("关联管线") private String pipeCode; + @ExcelProperty("监测类型") + private String monitorType; + private String watchObject; private Long deviceType; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java index 0980c34..ac5daf0 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java @@ -24,4 +24,7 @@ @ApiModelProperty("详细位置") private String position; + @ApiModelProperty("1:其他,3:管线") + private String type; + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java new file mode 100644 index 0000000..bce7ebd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.device.dto; + + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class BusPositionImportDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + + @ExcelProperty("管线编号") + private String pipeCode; + + @ExcelProperty("安装位号") + private String tagNumber; + + @ExcelProperty("经度(高德)") + private String lngGaode; + + @ExcelProperty("纬度(高德)") + private String latGaode; + + @ExcelProperty("详细位置") + private String position; + + @ExcelProperty("管理单位") + private Long deptid; + + @ExcelProperty("位置类别") + private String type; + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java index 58faa0e..d72ae78 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java @@ -16,13 +16,13 @@ private String deviceId; //移动命令:left right up down left_up left_down right_up right_down GOTO_PRESET - @ApiModelProperty("移动命令") + @ApiModelProperty("移动命令(left right up down left_up left_down right_up right_down)") private String command; - @ApiModelProperty("速度") + @ApiModelProperty("速度,一般传100") private String speed; - @ApiModelProperty("启停命令") + @ApiModelProperty("启停命令(0:开始,1:结束)") private String cameraAction; @ApiModelProperty("预置点编号") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java index b4ec73c..5a3d0b0 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java @@ -66,7 +66,7 @@ private String powerSupplyMode; - @ApiModelProperty("是否结束数据服务") + @ApiModelProperty("是否结束数据服务(1:是,0:否)") @TableField("DATA_SERVICE") private String dataService; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java index 1184995..407e3c1 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java @@ -193,10 +193,14 @@ @TableField(exist = false) private String bfztName; + @ApiModelProperty("设备类别(0:自有设备,1:数据服务)") + @TableField(exist = false) + private String deviceCategory; + public BusDevice() { } - public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds) { + public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds, String monitorType) { this.devcode = devcode; this.deviceType = deviceType; this.productId = productId; @@ -204,6 +208,7 @@ this.installDate = installDate; this.watchObject = watchObject; this.ledgerIds = ledgerIds; + this.monitorType = monitorType; } public static List convertDeviceList(List dtoList) { @@ -227,7 +232,8 @@ deviceImportDTO.getValid(), deviceImportDTO.getInstallDate(), deviceImportDTO.getWatchObject(), - deviceImportDTO.getLedgerIds())); + deviceImportDTO.getLedgerIds(), + deviceImportDTO.getMonitorType())); }); return busDeviceList; } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java index 12b52de..1ac8455 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java @@ -1,16 +1,20 @@ package com.casic.missiles.modular.device.entity; +import cn.hutool.core.util.IdUtil; 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 com.casic.missiles.modular.device.dto.BusPositionImportDTO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import java.io.Serializable; +import java.util.ArrayList; import java.util.Date; +import java.util.List; /** *

@@ -29,7 +33,7 @@ private static final long serialVersionUID = 1L; @ApiModelProperty("主键") - @TableId(value = "ID", type = IdType.AUTO) +// @TableId(value = "ID", type = IdType.AUTO) private Long id; @ApiModelProperty("编号") @@ -60,6 +64,10 @@ @TableField("DEPTID") private Long deptid; + @ApiModelProperty("类别(1:其他,3:管线)") + @TableField("`TYPE`") + private String type; + @ApiModelProperty("责任部门") @TableField("RESPONSIBLE_DEPT") private Long responsibleDept; @@ -110,9 +118,10 @@ public BusLedgerPipe() { } - public BusLedgerPipe(String pipeCode, String ledgerName, String tagNumber, + public BusLedgerPipe(Long id,String pipeCode, String ledgerName, String tagNumber, String lngGaode, String latGaode, String position, - Long deptid, String devcode) { + Long deptid, String devcode, String type) { + this.id=id; this.pipeCode = pipeCode; this.ledgerName = ledgerName; this.tagNumber = tagNumber; @@ -121,5 +130,26 @@ this.position = position; this.deptid = deptid; this.devcode = devcode; + this.type = type; } + + public static List convertDeviceList(List dtoList) { + + + List busDeviceList = new ArrayList<>(); + dtoList.forEach(positionImportDTO -> { + + busDeviceList.add(new BusLedgerPipe(IdUtil.getSnowflake(1,2).nextId(),positionImportDTO.getPipeCode(), + positionImportDTO.getTagNumber(), + positionImportDTO.getTagNumber(), + positionImportDTO.getLngGaode(), + positionImportDTO.getLatGaode(), + positionImportDTO.getPosition(), + positionImportDTO.getDeptid(), + "", + positionImportDTO.getType())); + }); + return busDeviceList; + } + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java index aaaa409..63c0576 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java @@ -52,4 +52,8 @@ List getDeviceRule(String devcode); + List getDevicesByCodes(List devcodes); + + List getListByWellId(Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java index 14f6a93..8692383 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java @@ -2,11 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; -import com.casic.missiles.core.datascope.DataScope; -import com.casic.missiles.modular.device.dto.BusLedgerPipeMonitorRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeResponseDTO; -import com.casic.missiles.modular.device.dto.MonitorDataRequestDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import java.util.List; @@ -26,17 +22,21 @@ Page monitorPipePageList(Page page, BusLedgerPipeMonitorRequestDTO request); - BusLedgerPipeResponseDTO detail(Long id,String devcode); + BusLedgerPipeResponseDTO detail(Long id, String devcode); - List> watchDataByPipe(MonitorDataRequestDTO requestDTO); + List> watchDataByPipe(MonitorDataRequestDTO requestDTO); - List> pipeList(); + List> pipeList(); - List> deviceList(); + List> deviceList(); BusLedgerPipe saveBusLedgerPipe(BusLedgerPipe busLedgerPipe); Boolean updateMonitorStatus(List tagNumbers); + List addPositionBatch(List results); + + List getListByNumber(String tagNumber); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java index 66ed812..ad72230 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java @@ -12,9 +12,12 @@ import com.casic.missiles.modular.device.dto.BusConfigOtherDTO; import com.casic.missiles.modular.device.dto.BusConfigRequestDTO; import com.casic.missiles.modular.device.entity.BusConfig; +import com.casic.missiles.modular.device.entity.BusDevice; import com.casic.missiles.modular.device.service.IBusConfigService; +import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.HttpClientUtils; import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -22,6 +25,9 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.LinkedBlockingDeque; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; /** *

@@ -36,6 +42,11 @@ public class BusConfigServiceImpl extends ServiceImpl implements IBusConfigService { private final AbstractPermissionContext abstractPermissionContext; + private final IBusDeviceService iBusDeviceService; + private final ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(3, 6, 60, TimeUnit.SECONDS, new LinkedBlockingDeque<>(10)); + + @Value("${casic.brSendConfigUrl}") + private String brSendConfigUrl; @Transactional @Override @@ -105,6 +116,42 @@ .operator(user != null ? user.getId() : null) .operatorName(user != null ? user.getName() : "").build()); }); + + + threadPoolExecutor.execute( + () -> { + //发送第三方下发: + if (busConfigOtherDTO.getProductName().contains("管网哨兵")) { + List busDeviceList = iBusDeviceService.getDevicesByCodes(devcodes); + for (BusDevice busDevice : busDeviceList) { + if (ObjectUtil.isAllNotEmpty(busDevice.getNbProductId(), busDevice.getNbDeviceId())) { + Map commandMap = new HashMap<>(); + commandMap.put("productId", busDevice.getNbProductId()); + commandMap.put("devCode", busDevice.getDevcode()); + commandMap.put("deviceId", busDevice.getNbDeviceId()); + commandMap.put("cmdList", busConfigOtherDTO.getCommandConfigList()); + HttpClientUtils.post(brSendConfigUrl+"/tube/config/send", JSON.toJSONString(commandMap)); + } + } + } else if (busConfigOtherDTO.getProductName().contains("智能警示桩")) { + + List busDeviceList = iBusDeviceService.getDevicesByCodes(devcodes); + for (BusDevice busDevice : busDeviceList) { + if (ObjectUtil.isAllNotEmpty(busDevice.getNbProductId(), busDevice.getNbDeviceId())) { + Map commandMap = new HashMap<>(); + commandMap.put("productId", busDevice.getNbProductId()); + commandMap.put("devCode", busDevice.getDevcode()); + commandMap.put("deviceId", busDevice.getNbDeviceId()); + commandMap.put("cmdList", busConfigOtherDTO.getCommandConfigList()); + HttpClientUtils.post(brSendConfigUrl+"/sentinel/config/send", JSON.toJSONString(commandMap)); + } + } + + } + } + ); + + return this.saveBatch(busConfigs); // List> mapList = new ArrayList<>(); // Map commandMap = new HashMap<>(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java index 60d15e5..bae6902 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java @@ -3,6 +3,7 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -80,6 +81,7 @@ @Override public Page listPage(Page page, BusDeviceDTO request) { + page.setOptimizeCountSql(false); Page busDevicePage = this.baseMapper.pageList(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List busDeviceList = busDevicePage.getRecords(); busDeviceList.forEach(busDevice -> { @@ -227,7 +229,7 @@ if (deviceDataEnum.getTableColumns().contains("cell")) { String[] queryColumns = deviceDataEnum.getQueryColumns().split(",", 4); resultMap = this.baseMapper.cellAnalysis(deviceDataEnum.getTableName(), - "cell,uptime", + deviceDataEnum.getCellColumn(), queryColumns[0], queryColumns[1], deviceDataEnum.getOrderColumn(), @@ -265,14 +267,13 @@ } else { List busDeviceLedgers = busDeviceLedgerService.getListByDeviceId(busDevice.getId()); //没绑定关系,先绑定 - if (ObjectUtil.isNotEmpty(busDeviceLedgers)) { + if (busDeviceLedgers == null || busDeviceLedgers.size() < 1) { busDeviceLedgerService.saveDeviceLedger(busDevice.getId(), busDevice.getLedgerIds(), busDevice.getWatchObject()); } else { //已绑定,判断是否位置变了 List ledgerIdsPre = busDeviceLedgers.stream().map(BusDeviceLedger::getLedgerId).collect(Collectors.toList()); if (ledgerIds.containsAll(ledgerIdsPre) && ledgerIdsPre.containsAll(ledgerIds)) { } else { - busDeviceLedgerService.deleteDeviceLedgers(Arrays.asList(busDevice.getId())); busDeviceLedgerService.saveDeviceLedger(busDevice.getId(), busDevice.getLedgerIds(), busDevice.getWatchObject()); } } @@ -304,6 +305,8 @@ List codeList = iBusLedgerService.getCodeLists(); //获取管线编号 List pipeCodeList = iBusLedgerService.getPipeCodeList(); + List pipeList = new ArrayList<>(); + final Integer[] index = {1}; results.forEach(deviceImportDTO -> { index[0]++; @@ -357,22 +360,16 @@ return; } //新增点位 - if ("3".equals(deviceImportDTO.getWatchObject())) { + if ("3".equals(deviceImportDTO.getWatchObject()) || "1".equals(deviceImportDTO.getWatchObject())) { //toDo:安装位号一致,入一次即可 //为管线 - BusLedgerPipe busLedgerPipe = new BusLedgerPipe(deviceImportDTO.getPipeCode(), deviceImportDTO.getTagNumber(), + Long pipeLedgerId = IdUtil.getSnowflake(1, 2).nextId(); + BusLedgerPipe busLedgerPipe = new BusLedgerPipe(pipeLedgerId, deviceImportDTO.getPipeCode(), deviceImportDTO.getTagNumber(), deviceImportDTO.getTagNumber(), deviceImportDTO.getLng(), deviceImportDTO.getLat(), - deviceImportDTO.getPosition(), deviceImportDTO.getDeptid(), deviceImportDTO.getDevCode()); - busLedgerPipe = iBusLedgerPipeService.saveBusLedgerPipe(busLedgerPipe); - deviceImportDTO.setLedgerIds(Arrays.asList(busLedgerPipe.getId())); - }else if("1".equals(deviceImportDTO.getWatchObject())){ - //新增闸井 - BusLedger busLedger = new BusLedger(deviceImportDTO.getTagNumber(), - deviceImportDTO.getTagNumber(),deviceImportDTO.getTagNumber(), - deviceImportDTO.getLng(),deviceImportDTO.getLat(),deviceImportDTO.getPosition(), - deviceImportDTO.getDeptid()); - this.iBusLedgerService.save(busLedger); - deviceImportDTO.setLedgerIds(Arrays.asList(busLedger.getId())); + deviceImportDTO.getPosition(), deviceImportDTO.getDeptid(), deviceImportDTO.getDevCode(), deviceImportDTO.getWatchObject()); +// busLedgerPipe = iBusLedgerPipeService.saveBusLedgerPipe(busLedgerPipe); + pipeList.add(busLedgerPipe); + deviceImportDTO.setLedgerIds(Arrays.asList(pipeLedgerId)); } } @@ -383,6 +380,10 @@ return list; } + if (pipeList != null && pipeList.size() > 0) { + iBusLedgerPipeService.saveBatch(pipeList); + } + List busDeviceList = BusDevice.convertDeviceList(results); //保存设备信息 @@ -514,7 +515,7 @@ } -// @Cacheable(value = "alarmRuleCache", key = "#devcode") + // @Cacheable(value = "alarmRuleCache", key = "#devcode") @Override public List getDeviceRule(String devcode) { List alarmRuleValueList = this.baseMapper.getSpecialDeviceRule(devcode); @@ -523,4 +524,18 @@ } return alarmRuleValueList; } + + + @Override + public List getDevicesByCodes(List devcodes) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("DEVCODE", devcodes); + queryWrapper.eq("VALID", "1"); + return this.baseMapper.selectList(queryWrapper); + } + + @Override + public List getListByWellId(Long wellId) { + return this.baseMapper.getListByWellId(wellId); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java index 5073159..7f8bfdc 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service.impl; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -12,11 +13,8 @@ import com.casic.missiles.enums.DeviceDataEnum; import com.casic.missiles.modular.device.dao.BusDeviceMapper; import com.casic.missiles.modular.device.dao.BusLedgerPipeMapper; -import com.casic.missiles.modular.device.dto.BusLedgerPipeMonitorRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeResponseDTO; -import com.casic.missiles.modular.device.dto.MonitorDataRequestDTO; -import com.casic.missiles.modular.device.entity.BusLedgerPipe; +import com.casic.missiles.modular.device.dto.*; +import com.casic.missiles.modular.device.entity.*; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.server.CommonServer; @@ -24,11 +22,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.stream.Collectors; /** *

@@ -63,6 +60,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getPipeCode()), "PIPE_CODE", request.getPipeCode()); queryWrapper.like(ObjectUtil.isNotEmpty(request.getPosition()), "POSITION", request.getPosition()); queryWrapper.in(ObjectUtil.isNotEmpty(deptIds), "DEPTID", deptIds); + queryWrapper.eq(ObjectUtil.isNotEmpty(request.getType()), "TYPE", request.getType()); Page pipePage = this.page(page, queryWrapper); List pipeList = pipePage.getRecords(); pipeList.forEach(pipe -> { @@ -156,6 +154,12 @@ return busLedgerPipe; } + public List getList() { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("VALID", "1"); + return this.baseMapper.selectList(queryWrapper); + } + @Override public Boolean updateMonitorStatus(List tagNumbers) { UpdateWrapper updateWrapper = new UpdateWrapper<>(); @@ -163,4 +167,43 @@ updateWrapper.set("MONITOR_STATE", "3"); return this.update(updateWrapper); } + + @Transactional + @Override + public List addPositionBatch(List results) { + List list = new ArrayList<>(); + if (!CollectionUtil.isEmpty(results)) { + List busLedgerPipeList = this.getList(); + List tagCodes = busLedgerPipeList.stream().map(BusLedgerPipe::getTagNumber).collect(Collectors.toList()); + final Integer[] index = {1}; + results.forEach(busPositionImportDTO -> { + index[0]++; + //设备编号查重 + if (tagCodes.contains(busPositionImportDTO.getTagNumber())) { + list.add("第" + index[0] + "行,安装位号已存在!"); + return; + } + + }); + if (CollectionUtil.isNotEmpty(list)) { + return list; + } + List busDeviceList = BusLedgerPipe.convertDeviceList(results); + + //保存点位信息 + this.saveBatch(busDeviceList); + + } else { + list.add("导入数据不能为空"); + } + return list; + } + + @Override + public List getListByNumber(String tagNumber) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("VALID", "1"); + queryWrapper.eq("TAG_NUMBER", tagNumber); + return this.baseMapper.selectList(queryWrapper); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java index 5798675..ec2b3f5 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.modular.device.dao.SyncLogMapper; import com.casic.missiles.modular.device.entity.SyncLog; import com.casic.missiles.modular.device.service.ISyncLogDetailService; @@ -39,7 +40,8 @@ syncLog.setUpdateCount(updateCount); syncLog.setAddCount(addCount); syncLog.setDeleteCount(deleteCount); - syncLog.setCreateUser(permissionContext.getAuthService().getLoginUser().getName()); + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + syncLog.setCreateUser(null == authUser ? "admin" : authUser.getName()); return this.baseMapper.insert(syncLog) > 0 ? true : false; } diff --git a/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java index b80c202..6be2b47 100644 --- a/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java +++ b/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -1,56 +1,56 @@ -package com.casic.missiles.job.config; - -import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - - -@Slf4j -@Configuration -@Data -@ConditionalOnExpression("T(org.apache.commons.lang3.StringUtils).isNotEmpty('${xxl.job.admin.addresses}')") -public class XxlJobConfig { - @Value("${xxl.job.admin.addresses}") - private String adminAddresses; - - @Value("${xxl.job.accessToken}") - private String accessToken; - - @Value("${xxl.job.executor.appname}") - private String appname; - -// @Value("${xxl.job.executor.address}") -// private String address; - - @Value("${xxl.job.executor.ip}") - private String ip; - - @Value("${xxl.job.executor.port}") - private int port; - - @Value("${xxl.job.executor.logpath}") - private String logPath; - - @Value("${xxl.job.executor.logretentiondays}") - private int logRetentionDays; - - @Bean - public XxlJobSpringExecutor xxlJobExecutor() { - log.info(">>>>>>>>>>> xxl-job config init."); - XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); - xxlJobSpringExecutor.setAdminAddresses(adminAddresses); - xxlJobSpringExecutor.setAppname(appname); -// xxlJobSpringExecutor.setAddress(address); - xxlJobSpringExecutor.setIp(ip); - xxlJobSpringExecutor.setPort(port); - xxlJobSpringExecutor.setAccessToken(accessToken); - xxlJobSpringExecutor.setLogPath(logPath); - xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); - - return xxlJobSpringExecutor; - } -} +//package com.casic.missiles.job.config; +// +//import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +//import lombok.Data; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.beans.factory.annotation.Value; +//import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; +//import org.springframework.context.annotation.Bean; +//import org.springframework.context.annotation.Configuration; +// +// +//@Slf4j +//@Configuration +//@Data +//@ConditionalOnExpression("T(org.apache.commons.lang3.StringUtils).isNotEmpty('${xxl.job.admin.addresses}')") +//public class XxlJobConfig { +// @Value("${xxl.job.admin.addresses}") +// private String adminAddresses; +// +// @Value("${xxl.job.accessToken}") +// private String accessToken; +// +// @Value("${xxl.job.executor.appname}") +// private String appname; +// +//// @Value("${xxl.job.executor.address}") +//// private String address; +// +// @Value("${xxl.job.executor.ip}") +// private String ip; +// +// @Value("${xxl.job.executor.port}") +// private int port; +// +// @Value("${xxl.job.executor.logpath}") +// private String logPath; +// +// @Value("${xxl.job.executor.logretentiondays}") +// private int logRetentionDays; +// +// @Bean +// public XxlJobSpringExecutor xxlJobExecutor() { +// log.info(">>>>>>>>>>> xxl-job config init."); +// XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); +// xxlJobSpringExecutor.setAdminAddresses(adminAddresses); +// xxlJobSpringExecutor.setAppname(appname); +//// xxlJobSpringExecutor.setAddress(address); +// xxlJobSpringExecutor.setIp(ip); +// xxlJobSpringExecutor.setPort(port); +// xxlJobSpringExecutor.setAccessToken(accessToken); +// xxlJobSpringExecutor.setLogPath(logPath); +// xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); +// +// return xxlJobSpringExecutor; +// } +//} diff --git a/casic-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java index 798424c..3785003 100644 --- a/casic-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java +++ b/casic-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -1,37 +1,37 @@ -package com.casic.missiles.job.handler; - - -import com.xxl.job.core.biz.model.ReturnT; -import com.xxl.job.core.context.XxlJobHelper; -import com.xxl.job.core.handler.annotation.XxlJob; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; - -/** - * XxlJob开发示例(Bean模式) - * - * 开发步骤: - * 1、任务开发:在Spring Bean实例中,开发Job方法; - * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 - * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; - * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; - */ -@Slf4j -@Component -public class DemoJobHandler { - - @XxlJob(value = "demoHandler") - public ReturnT execute(String param) throws Exception { - System.out.println("调度任务Demo执行"); - XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); - -// for (int i = 0; i < 5; i++) { -// XxlJobLogger.log("beat at:" + i); -// TimeUnit.SECONDS.sleep(2); -// } - return SUCCESS; - } - -} +//package com.casic.missiles.job.handler; +// +// +//import com.xxl.job.core.biz.model.ReturnT; +//import com.xxl.job.core.context.XxlJobHelper; +//import com.xxl.job.core.handler.annotation.XxlJob; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.stereotype.Component; +// +//import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; +// +///** +// * XxlJob开发示例(Bean模式) +// * +// * 开发步骤: +// * 1、任务开发:在Spring Bean实例中,开发Job方法; +// * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 +// * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; +// * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; +// */ +//@Slf4j +//@Component +//public class DemoJobHandler { +// +// @XxlJob(value = "demoHandler") +// public ReturnT execute(String param) throws Exception { +// System.out.println("调度任务Demo执行"); +// XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); +// +//// for (int i = 0; i < 5; i++) { +//// XxlJobLogger.log("beat at:" + i); +//// TimeUnit.SECONDS.sleep(2); +//// } +// return SUCCESS; +// } +// +//} diff --git a/casic-job/src/main/java/com/casic/missiles/job/handler/OfflineJobHandler.java b/casic-job/src/main/java/com/casic/missiles/job/handler/OfflineJobHandler.java index 1e6708f..276c5db 100644 --- a/casic-job/src/main/java/com/casic/missiles/job/handler/OfflineJobHandler.java +++ b/casic-job/src/main/java/com/casic/missiles/job/handler/OfflineJobHandler.java @@ -1,26 +1,26 @@ -package com.casic.missiles.job.handler; - -import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; -import com.xxl.job.core.context.XxlJobHelper; -import com.xxl.job.core.handler.annotation.XxlJob; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -@RequiredArgsConstructor -public class OfflineJobHandler { - - private final IAlarmRecordsService iAlarmRecordsService; - - /** - * 离线判断处理 - */ - @XxlJob("offlineJobHandler") - public void offlineJobHandler() { - XxlJobHelper.log("check offline"); - iAlarmRecordsService.processOffline(); - } - -} +//package com.casic.missiles.job.handler; +// +//import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +//import com.xxl.job.core.context.XxlJobHelper; +//import com.xxl.job.core.handler.annotation.XxlJob; +//import lombok.RequiredArgsConstructor; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.stereotype.Component; +// +//@Slf4j +//@Component +//@RequiredArgsConstructor +//public class OfflineJobHandler { +// +// private final IAlarmRecordsService iAlarmRecordsService; +// +// /** +// * 离线判断处理 +// */ +// @XxlJob("offlineJobHandler") +// public void offlineJobHandler() { +// XxlJobHelper.log("check offline"); +// iAlarmRecordsService.processOffline(); +// } +// +//} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java new file mode 100644 index 0000000..fc881a1 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.data.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 外协管盯 前端控制器 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RestController +@RequestMapping("/system/dataGasOther") +public class DataGasOtherController { + +} + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java new file mode 100644 index 0000000..b5f3627 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.data.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 外协管盯 Mapper 接口 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Mapper +public interface DataGasOtherMapper extends BaseMapper { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml new file mode 100644 index 0000000..8ce1455 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID, DEVCODE, WELL_CODE, WELL_NUMBER, GASVAL, VBAT, BATSTA, SIN, RSRP, SINR, UPTIME, LOGTIME, SIG, TEMP, SS_STATE + + + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java new file mode 100644 index 0000000..53972ba --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java @@ -0,0 +1,94 @@ +package com.casic.missiles.modular.data.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 外协管盯 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Builder +@Data +@TableName("data_gas_other") +@ApiModel(value = "DataGasOther对象", description = "外协管盯") +public class DataGasOther implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId("ID") + private Long id; + + @ApiModelProperty("设备编号") + @TableField("DEVCODE") + private String devcode; + + @ApiModelProperty("点位编号") + @TableField("WELL_CODE") + private String wellCode; + + @ApiModelProperty("位号") + @TableField("WELL_NUMBER") + private String wellNumber; + + @ApiModelProperty("气体浓度采样值") + @TableField("GASVAL") + private String gasval; + + @ApiModelProperty("设备电池电压值(毫伏)") + @TableField("VBAT") + private String vbat; + + @ApiModelProperty("电池状态0 正常、 1 低电告警、2 关机") + @TableField("BATSTA") + private String batsta; + + @ApiModelProperty("接收信号强度等级") + @TableField("SIN") + private String sin; + + @ApiModelProperty("接收信号参考质量 服务小 区的 RSRP 值") + @TableField("RSRP") + private String rsrp; + + @ApiModelProperty("信噪比") + @TableField("SINR") + private String sinr; + + @ApiModelProperty("采集时间") + @TableField("UPTIME") + private Date uptime; + + @ApiModelProperty("上传时间") + @TableField("LOGTIME") + private Date logtime; + + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态,0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java index 86077b8..f4d4417 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java @@ -76,4 +76,17 @@ private Date logtime; + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态:0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java new file mode 100644 index 0000000..842ca0b --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.data.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.data.entity.DataGasOther; + +/** + *

+ * 外协管盯 服务类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +public interface IDataGasOtherService extends IService { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java new file mode 100644 index 0000000..4c660e9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java @@ -0,0 +1,226 @@ +package com.casic.missiles.modular.data.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.enums.DeviceTypeEnum; +import com.casic.missiles.enums.DictEnum; +import com.casic.missiles.modular.alarm.dto.AlarmDeviceRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.AlarmRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.BusAlarmLedgerDTO; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.data.dao.DataGasMapper; +import com.casic.missiles.modular.data.dao.DataGasOtherMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import com.casic.missiles.modular.data.entity.DataTubeOther; +import com.casic.missiles.modular.data.service.IDataAbstractService; +import com.casic.missiles.modular.data.service.IDataGasOtherService; +import com.casic.missiles.modular.data.service.ITrackLogService; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Optional; + +/** + *

+ * 外协管盯 服务实现类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RequiredArgsConstructor +@Service +public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { + + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + private final DataGasMapper dataGasMapper; + private final IAlarmRecordsService alarmRecordsService; + private final IAlarmRuleService alarmRuleService; + private final ITrackLogService iTrackLogService; + private final IBusDeviceService busDeviceService; + + @Override + public void process(String dataContent) { + + //解析数据+根据业务处理存储数据 + JSONObject json = JSONObject.parseObject(dataContent); + String devCode = json.get("devCode").toString(); + JSONObject jsonObject = json.getJSONObject("mBody"); + if (mType[0].equals(json.get("mType")) || mType[3].equals(json.get("mType"))) {//存储上报数据 + this.processNormalData(jsonObject, devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + this.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.TubeOther.name().equals(json.get("devType"))) { + if ("TubeOtherConfigSuccess".equals(jsonObject.get("bType"))) { +// deviceConfigManager.updateStatus(devCode); + } + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } else if (mType[4].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); +// imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; + try { + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); + } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + } + } + + @Transactional + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.getString("cell"); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = jsonObject.getJSONArray("datas"); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + String bfcf = busDeviceService.getBfcf(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).getString("gasval"); + String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); + String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); + String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataGasOther.builder() + .wellCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .wellNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .devcode(devCode) +// .cell(cell) + .gasval(gas) + .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime))) + .logtime(new Date()) + .vbat(vbat) + .batsta(batsta) + .rsrp(rsrp) + .sin(pci) + .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) + .build());//存储采集数据 + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) continue; + + //3.清除设备告警 + alarmRecordsService.cancelDeviceAlarm(devCode); + //4.存报警 + //若没绑定井,则不产生报警 + boolean alarmFlag = false; + if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { + //获取报警规则 + List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); + for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { + if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && + Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { + alarmFlag = true; + //写入报警 + //1、判断报警是否已存在 + if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.TubeOther.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); + //7.更新管线状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java index d248540..b33a1ee 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java @@ -91,7 +91,6 @@ } - public List getBusAlarmLedgerList(String devCode) { return this.dataGasMapper.getListByDevCode(devCode); } @@ -113,6 +112,13 @@ for (int i = 0; i < jsonArray.size(); i++) { try { String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) .findFirst(); @@ -175,18 +181,18 @@ alarmRecordsService.cancelDeviceAlarm(devCode); //4.存报警 //若没绑定井,则不产生报警 - boolean alarmFlag = false; + boolean alarmFlag = false; if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { //获取报警规则 List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { - alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); } break; } @@ -197,7 +203,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及设备状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新监测井状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java index e848fce..6297093 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java @@ -84,42 +84,78 @@ } - @Transactional - public void processAlarmData(JSONObject jsonObject, String devCode) { - JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + public void processEventAlarm(String devCode, String eventTypeCode, String logTime, String eventValue) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - //获取报警事件 - List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - - List busWellDTOList = dataGasMapper.getListByDevCode(devCode); - //若没绑定井,则不产生报警 - if (busWellDTOList != null && busWellDTOList.size() > 0) { - - for (int i = 0; i < jsonArray.size(); i++) { + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + //特殊处理消警 + if ("0".equals(eventValue)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, eventTypeCode); + } + return; } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> eventTypeCode.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 - if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + if (!alarmDeviceRuleResponseDTO.isPresent()) return; //1.查询是否已存在该类报警 - if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) return; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); - - + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + } + } + } + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + try { + String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmEventCode)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } } } } @@ -169,7 +205,76 @@ .rightVibrateAlarm(VibR) .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(uptime))) .logtime(new Date()) - .build());//存储采集数据 + .build()); + + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + ruleResponseDTOList.forEach(ruleResponseDTO -> { + + if ("Sloping".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Sloping)&&(!alarmRecordsService.isWatchAlarms(devCode,"Sloping"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Sloping", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Sloping)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Sloping"); + + } + } + if ("Destroy".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Destroy)&&(!alarmRecordsService.isWatchAlarms(devCode,"Destroy"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Destroy", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Destroy)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Destroy"); + + } + } + if ("Leak".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Leak)&&(!alarmRecordsService.isWatchAlarms(devCode,"Leak"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Leak", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Leak)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Leak"); + + } + } + if ("DiscL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscL)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscL"); + + } + } + if ("DiscR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscR)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscR"); + } + } + + if ("VibL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibL)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibL"); + } + } + if ("VibR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibR)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibR"); + } + } + }); + +// //处理报警事件 +// processEventAlarm(devCode,"Sloping",uptime,Sloping); +// processEventAlarm(devCode,"Destroy",uptime,Destroy); +// processEventAlarm(devCode,"Leak",uptime,Leak); +// processEventAlarm(devCode,"DiscL",uptime,DiscL); +// processEventAlarm(devCode,"DiscR",uptime,DiscR); +// processEventAlarm(devCode,"VibL",uptime,VibL); +// processEventAlarm(devCode,"VibR",uptime,VibR); + //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -197,7 +302,7 @@ if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && gas >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), gas)) { @@ -213,7 +318,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R,alarmFlag?"燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R, alarmFlag ? "燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java index f913775..895d201 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java @@ -89,6 +89,7 @@ String bfcf = busDeviceService.getBfcf(devCode); if (DictEnum.BF_ON.equals(bfcf)) { JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); //获取报警事件 List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); List busWellDTOList = dataGasMapper.getListByDevCode(devCode); @@ -96,25 +97,43 @@ if (busWellDTOList != null && busWellDTOList.size() > 0) { for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 if (!alarmDeviceRuleResponseDTO.isPresent()) continue; //1.查询是否已存在该类报警 if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { @@ -141,6 +160,9 @@ String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); gas = String.format("%.2f", Double.valueOf(gas)); //1.存数据 save(DataTubeOther.builder() @@ -156,6 +178,9 @@ .rsrp(rsrp) .sin(pci) .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) .build());//存储采集数据 //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -186,7 +211,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 98e736b..2288075 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -216,5 +216,15 @@ public ReturnDTO syncDeviceStatus() { return ReturnUtil.success(iBusDeviceService.syncDeviceStatus()); } + + @ApiOperation("根据闸井id获取设备信息") + @PostMapping("/getListByWellId") + @ResponseBody + public ReturnDTO getListByWellId(@RequestBody IdDTO idDTO) { + Assert.isFalse(ObjectUtil.isEmpty(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iBusDeviceService.getListByWellId(idDTO.getId())); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java index 72a2d84..d6d9743 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java @@ -85,6 +85,7 @@ return ReturnUtil.success(iBusLedgerService.detail(idDTO.getId())); } + /** * 同步三级部门 * diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java index 9e412d2..4316b56 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java @@ -1,22 +1,33 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.response.ErrorResponseData; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; +import com.casic.missiles.modular.device.dto.BusPositionImportDTO; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.ReturnUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataAccessException; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; /** @@ -40,8 +51,44 @@ @PostMapping("/addPosition") @ResponseBody public ReturnDTO addPosition(@RequestBody BusLedgerPipe busLedgerPipe) { + + List busLedgerPipeList = iBusLedgerPipeService.getListByNumber(busLedgerPipe.getTagNumber()); + if(busLedgerPipeList!=null&&busLedgerPipeList.size()>0){ + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE,"安装位号已存!!!"); + } + Long id =IdUtil.getSnowflake(1,2).nextId(); + busLedgerPipe.setId(id); iBusLedgerPipeService.save(busLedgerPipe); - return ReturnUtil.success(busLedgerPipe.getId()); + return ReturnUtil.success(id); + } + + @ApiOperation("批量导入") + @RequestMapping(value = "/batchImport", method = RequestMethod.POST) + @ResponseBody + public Object batchImport(@RequestParam("file") MultipartFile file) { + List results = new ArrayList<>(); + try { + results = this.importExcel(BusPositionImportDTO.class, file, null, null); + List list = iBusLedgerPipeService.addPositionBatch(results); + if (!CollectionUtil.isEmpty(list)) { + //获取校验报错信息 + return new ErrorResponseData(list.get(0)); + } + } catch (Exception e) { + return catchMybatisPlusException(e, "导入位置信息失败"); + } + return ResponseData.success(); + } + + private ResponseData catchMybatisPlusException(Exception e, String errorMsg) { + if (e instanceof DataAccessException) { + DataAccessException mybatisPlusException = (DataAccessException) e; + String message = mybatisPlusException.getRootCause().getMessage(); + if (message.contains("Duplicate entry '")) { + return new ErrorResponseData("安装位号重复:" + message.replaceAll("Duplicate entry '", "").replaceAll("' for key 'DEVCODE'", "")); + } + } + return new ErrorResponseData(errorMsg); } @ApiOperation("编辑点位") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java index d1e08a8..d938876 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java @@ -51,6 +51,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getOperatorName()), "CREATE_USER", request.getOperatorName()); queryWrapper.ge(ObjectUtil.isNotEmpty(request.getStartTime()), "START_TIME", request.getStartTime()); queryWrapper.le(ObjectUtil.isNotEmpty(request.getEndTime()), "END_TIME", request.getEndTime()); + queryWrapper.orderByDesc("START_TIME"); return ReturnUtil.success(super.packForBT(iSyncLogService.page(page, queryWrapper))); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java index 5ee5291..23ddee9 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java @@ -73,4 +73,12 @@ " where bd.DEVCODE= #{devcode} and bd.VALID=1 " + ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD asc") List getDeviceTypeRule(@Param("devcode") String devcode); + + + @Select("SELECT bd.* from bus_device bd " + + "left JOIN bus_device_ledger bl on bd.id= bl.DEVICE_ID and bl.VALID=1 " + + "LEFT JOIN bus_ledger_all_view bv on bv.id= bl.LEDGER_ID and bv.type= bl.TYPE and bv.VALID=1 " + + "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") + List getListByWellId(@Param("wellId") Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java index e1d16c4..a4c3f7a 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java @@ -37,7 +37,7 @@ @Select("SELECT b.ORG_ID,b.ORG_CODE,b.ORG_NAME,b.PARENT_ID FROM `bus_sync_org_relation` b WHERE b.DEL_FLAG =0 and b.PARENT_ID = #{syncId} ") List synDept(@Param("syncId") String syncId); - @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view ") + @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view where VALID=1") List getBusLedgers(); @Select("SELECT DEVCODE FROM `bus_device` where VALID>0 ") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml index 99ef10b..c6d1fff 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml @@ -29,6 +29,7 @@ bp.DEVICE_MODEL as deviceModel, bt.TYPE_NAME as typeName, + bp.DATA_SERVICE as deviceCategory, bm.`NAME` as manufactureName, bl.tagNumber as tagNumber, bl.id as ledgerId, @@ -81,6 +82,10 @@ and bd.LOGTIME #{request.logTime2} + + and bp.DATA_SERVICE =#{request.deviceCategory} + + ORDER BY bd.INSTALL_DATE DESC diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml index bdadb6a..d3f4684 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml @@ -40,7 +40,7 @@ `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + AND bdl.VALID = 1 JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -99,8 +99,8 @@ bm.`NAME` as manufactureName FROM `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE - LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID and bdl.type=blp.type + AND bdl.VALID = 1 LEFT JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -117,7 +117,9 @@ WITH station_temp as(SELECT bl.ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID FROM `bus_ledger` bl where bl.VALID=1 and bl.TYPE =2) - select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME from station_temp bl + select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME,bd.DEVCODE from station_temp bl left join bus_device_ledger bdl on bdl.LEDGER_ID = bl.ID and bdl.TYPE =2 and bdl.valid=1 left join bus_device bd on bd.id= bdl.DEVICE_ID and bd.VALID=1 order by bl.ID diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml index 7b92b04..1d97c64 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml @@ -184,7 +184,7 @@ WHERE EQ_LOCNO like 'N%' and - EQ_CATEGORY in (1,3) + EQ_CATEGORY in (1,2,3,5) diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java index 859cf08..143b42d 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java @@ -23,6 +23,9 @@ @ApiModelProperty("设备类型id") private Long typeId; + @ApiModelProperty("产品名称") + private String productName; + @ApiModelProperty("指令集合") private List commandConfigList; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java index 646610b..2cb5894 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("最新上传结束时间") private String logTime2; + + @ApiModelProperty("设备类别(0:自有设备,1:数据服务)") + private String deviceCategory; } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java index 8c95537..28b30fa 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java @@ -44,6 +44,9 @@ @ExcelProperty("关联管线") private String pipeCode; + @ExcelProperty("监测类型") + private String monitorType; + private String watchObject; private Long deviceType; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java index 0980c34..ac5daf0 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java @@ -24,4 +24,7 @@ @ApiModelProperty("详细位置") private String position; + @ApiModelProperty("1:其他,3:管线") + private String type; + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java new file mode 100644 index 0000000..bce7ebd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.device.dto; + + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class BusPositionImportDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + + @ExcelProperty("管线编号") + private String pipeCode; + + @ExcelProperty("安装位号") + private String tagNumber; + + @ExcelProperty("经度(高德)") + private String lngGaode; + + @ExcelProperty("纬度(高德)") + private String latGaode; + + @ExcelProperty("详细位置") + private String position; + + @ExcelProperty("管理单位") + private Long deptid; + + @ExcelProperty("位置类别") + private String type; + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java index 58faa0e..d72ae78 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java @@ -16,13 +16,13 @@ private String deviceId; //移动命令:left right up down left_up left_down right_up right_down GOTO_PRESET - @ApiModelProperty("移动命令") + @ApiModelProperty("移动命令(left right up down left_up left_down right_up right_down)") private String command; - @ApiModelProperty("速度") + @ApiModelProperty("速度,一般传100") private String speed; - @ApiModelProperty("启停命令") + @ApiModelProperty("启停命令(0:开始,1:结束)") private String cameraAction; @ApiModelProperty("预置点编号") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java index b4ec73c..5a3d0b0 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java @@ -66,7 +66,7 @@ private String powerSupplyMode; - @ApiModelProperty("是否结束数据服务") + @ApiModelProperty("是否结束数据服务(1:是,0:否)") @TableField("DATA_SERVICE") private String dataService; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java index 1184995..407e3c1 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java @@ -193,10 +193,14 @@ @TableField(exist = false) private String bfztName; + @ApiModelProperty("设备类别(0:自有设备,1:数据服务)") + @TableField(exist = false) + private String deviceCategory; + public BusDevice() { } - public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds) { + public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds, String monitorType) { this.devcode = devcode; this.deviceType = deviceType; this.productId = productId; @@ -204,6 +208,7 @@ this.installDate = installDate; this.watchObject = watchObject; this.ledgerIds = ledgerIds; + this.monitorType = monitorType; } public static List convertDeviceList(List dtoList) { @@ -227,7 +232,8 @@ deviceImportDTO.getValid(), deviceImportDTO.getInstallDate(), deviceImportDTO.getWatchObject(), - deviceImportDTO.getLedgerIds())); + deviceImportDTO.getLedgerIds(), + deviceImportDTO.getMonitorType())); }); return busDeviceList; } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java index 12b52de..1ac8455 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java @@ -1,16 +1,20 @@ package com.casic.missiles.modular.device.entity; +import cn.hutool.core.util.IdUtil; 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 com.casic.missiles.modular.device.dto.BusPositionImportDTO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import java.io.Serializable; +import java.util.ArrayList; import java.util.Date; +import java.util.List; /** *

@@ -29,7 +33,7 @@ private static final long serialVersionUID = 1L; @ApiModelProperty("主键") - @TableId(value = "ID", type = IdType.AUTO) +// @TableId(value = "ID", type = IdType.AUTO) private Long id; @ApiModelProperty("编号") @@ -60,6 +64,10 @@ @TableField("DEPTID") private Long deptid; + @ApiModelProperty("类别(1:其他,3:管线)") + @TableField("`TYPE`") + private String type; + @ApiModelProperty("责任部门") @TableField("RESPONSIBLE_DEPT") private Long responsibleDept; @@ -110,9 +118,10 @@ public BusLedgerPipe() { } - public BusLedgerPipe(String pipeCode, String ledgerName, String tagNumber, + public BusLedgerPipe(Long id,String pipeCode, String ledgerName, String tagNumber, String lngGaode, String latGaode, String position, - Long deptid, String devcode) { + Long deptid, String devcode, String type) { + this.id=id; this.pipeCode = pipeCode; this.ledgerName = ledgerName; this.tagNumber = tagNumber; @@ -121,5 +130,26 @@ this.position = position; this.deptid = deptid; this.devcode = devcode; + this.type = type; } + + public static List convertDeviceList(List dtoList) { + + + List busDeviceList = new ArrayList<>(); + dtoList.forEach(positionImportDTO -> { + + busDeviceList.add(new BusLedgerPipe(IdUtil.getSnowflake(1,2).nextId(),positionImportDTO.getPipeCode(), + positionImportDTO.getTagNumber(), + positionImportDTO.getTagNumber(), + positionImportDTO.getLngGaode(), + positionImportDTO.getLatGaode(), + positionImportDTO.getPosition(), + positionImportDTO.getDeptid(), + "", + positionImportDTO.getType())); + }); + return busDeviceList; + } + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java index aaaa409..63c0576 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java @@ -52,4 +52,8 @@ List getDeviceRule(String devcode); + List getDevicesByCodes(List devcodes); + + List getListByWellId(Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java index 14f6a93..8692383 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java @@ -2,11 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; -import com.casic.missiles.core.datascope.DataScope; -import com.casic.missiles.modular.device.dto.BusLedgerPipeMonitorRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeResponseDTO; -import com.casic.missiles.modular.device.dto.MonitorDataRequestDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import java.util.List; @@ -26,17 +22,21 @@ Page monitorPipePageList(Page page, BusLedgerPipeMonitorRequestDTO request); - BusLedgerPipeResponseDTO detail(Long id,String devcode); + BusLedgerPipeResponseDTO detail(Long id, String devcode); - List> watchDataByPipe(MonitorDataRequestDTO requestDTO); + List> watchDataByPipe(MonitorDataRequestDTO requestDTO); - List> pipeList(); + List> pipeList(); - List> deviceList(); + List> deviceList(); BusLedgerPipe saveBusLedgerPipe(BusLedgerPipe busLedgerPipe); Boolean updateMonitorStatus(List tagNumbers); + List addPositionBatch(List results); + + List getListByNumber(String tagNumber); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java index 66ed812..ad72230 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java @@ -12,9 +12,12 @@ import com.casic.missiles.modular.device.dto.BusConfigOtherDTO; import com.casic.missiles.modular.device.dto.BusConfigRequestDTO; import com.casic.missiles.modular.device.entity.BusConfig; +import com.casic.missiles.modular.device.entity.BusDevice; import com.casic.missiles.modular.device.service.IBusConfigService; +import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.HttpClientUtils; import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -22,6 +25,9 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.LinkedBlockingDeque; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; /** *

@@ -36,6 +42,11 @@ public class BusConfigServiceImpl extends ServiceImpl implements IBusConfigService { private final AbstractPermissionContext abstractPermissionContext; + private final IBusDeviceService iBusDeviceService; + private final ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(3, 6, 60, TimeUnit.SECONDS, new LinkedBlockingDeque<>(10)); + + @Value("${casic.brSendConfigUrl}") + private String brSendConfigUrl; @Transactional @Override @@ -105,6 +116,42 @@ .operator(user != null ? user.getId() : null) .operatorName(user != null ? user.getName() : "").build()); }); + + + threadPoolExecutor.execute( + () -> { + //发送第三方下发: + if (busConfigOtherDTO.getProductName().contains("管网哨兵")) { + List busDeviceList = iBusDeviceService.getDevicesByCodes(devcodes); + for (BusDevice busDevice : busDeviceList) { + if (ObjectUtil.isAllNotEmpty(busDevice.getNbProductId(), busDevice.getNbDeviceId())) { + Map commandMap = new HashMap<>(); + commandMap.put("productId", busDevice.getNbProductId()); + commandMap.put("devCode", busDevice.getDevcode()); + commandMap.put("deviceId", busDevice.getNbDeviceId()); + commandMap.put("cmdList", busConfigOtherDTO.getCommandConfigList()); + HttpClientUtils.post(brSendConfigUrl+"/tube/config/send", JSON.toJSONString(commandMap)); + } + } + } else if (busConfigOtherDTO.getProductName().contains("智能警示桩")) { + + List busDeviceList = iBusDeviceService.getDevicesByCodes(devcodes); + for (BusDevice busDevice : busDeviceList) { + if (ObjectUtil.isAllNotEmpty(busDevice.getNbProductId(), busDevice.getNbDeviceId())) { + Map commandMap = new HashMap<>(); + commandMap.put("productId", busDevice.getNbProductId()); + commandMap.put("devCode", busDevice.getDevcode()); + commandMap.put("deviceId", busDevice.getNbDeviceId()); + commandMap.put("cmdList", busConfigOtherDTO.getCommandConfigList()); + HttpClientUtils.post(brSendConfigUrl+"/sentinel/config/send", JSON.toJSONString(commandMap)); + } + } + + } + } + ); + + return this.saveBatch(busConfigs); // List> mapList = new ArrayList<>(); // Map commandMap = new HashMap<>(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java index 60d15e5..bae6902 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java @@ -3,6 +3,7 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -80,6 +81,7 @@ @Override public Page listPage(Page page, BusDeviceDTO request) { + page.setOptimizeCountSql(false); Page busDevicePage = this.baseMapper.pageList(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List busDeviceList = busDevicePage.getRecords(); busDeviceList.forEach(busDevice -> { @@ -227,7 +229,7 @@ if (deviceDataEnum.getTableColumns().contains("cell")) { String[] queryColumns = deviceDataEnum.getQueryColumns().split(",", 4); resultMap = this.baseMapper.cellAnalysis(deviceDataEnum.getTableName(), - "cell,uptime", + deviceDataEnum.getCellColumn(), queryColumns[0], queryColumns[1], deviceDataEnum.getOrderColumn(), @@ -265,14 +267,13 @@ } else { List busDeviceLedgers = busDeviceLedgerService.getListByDeviceId(busDevice.getId()); //没绑定关系,先绑定 - if (ObjectUtil.isNotEmpty(busDeviceLedgers)) { + if (busDeviceLedgers == null || busDeviceLedgers.size() < 1) { busDeviceLedgerService.saveDeviceLedger(busDevice.getId(), busDevice.getLedgerIds(), busDevice.getWatchObject()); } else { //已绑定,判断是否位置变了 List ledgerIdsPre = busDeviceLedgers.stream().map(BusDeviceLedger::getLedgerId).collect(Collectors.toList()); if (ledgerIds.containsAll(ledgerIdsPre) && ledgerIdsPre.containsAll(ledgerIds)) { } else { - busDeviceLedgerService.deleteDeviceLedgers(Arrays.asList(busDevice.getId())); busDeviceLedgerService.saveDeviceLedger(busDevice.getId(), busDevice.getLedgerIds(), busDevice.getWatchObject()); } } @@ -304,6 +305,8 @@ List codeList = iBusLedgerService.getCodeLists(); //获取管线编号 List pipeCodeList = iBusLedgerService.getPipeCodeList(); + List pipeList = new ArrayList<>(); + final Integer[] index = {1}; results.forEach(deviceImportDTO -> { index[0]++; @@ -357,22 +360,16 @@ return; } //新增点位 - if ("3".equals(deviceImportDTO.getWatchObject())) { + if ("3".equals(deviceImportDTO.getWatchObject()) || "1".equals(deviceImportDTO.getWatchObject())) { //toDo:安装位号一致,入一次即可 //为管线 - BusLedgerPipe busLedgerPipe = new BusLedgerPipe(deviceImportDTO.getPipeCode(), deviceImportDTO.getTagNumber(), + Long pipeLedgerId = IdUtil.getSnowflake(1, 2).nextId(); + BusLedgerPipe busLedgerPipe = new BusLedgerPipe(pipeLedgerId, deviceImportDTO.getPipeCode(), deviceImportDTO.getTagNumber(), deviceImportDTO.getTagNumber(), deviceImportDTO.getLng(), deviceImportDTO.getLat(), - deviceImportDTO.getPosition(), deviceImportDTO.getDeptid(), deviceImportDTO.getDevCode()); - busLedgerPipe = iBusLedgerPipeService.saveBusLedgerPipe(busLedgerPipe); - deviceImportDTO.setLedgerIds(Arrays.asList(busLedgerPipe.getId())); - }else if("1".equals(deviceImportDTO.getWatchObject())){ - //新增闸井 - BusLedger busLedger = new BusLedger(deviceImportDTO.getTagNumber(), - deviceImportDTO.getTagNumber(),deviceImportDTO.getTagNumber(), - deviceImportDTO.getLng(),deviceImportDTO.getLat(),deviceImportDTO.getPosition(), - deviceImportDTO.getDeptid()); - this.iBusLedgerService.save(busLedger); - deviceImportDTO.setLedgerIds(Arrays.asList(busLedger.getId())); + deviceImportDTO.getPosition(), deviceImportDTO.getDeptid(), deviceImportDTO.getDevCode(), deviceImportDTO.getWatchObject()); +// busLedgerPipe = iBusLedgerPipeService.saveBusLedgerPipe(busLedgerPipe); + pipeList.add(busLedgerPipe); + deviceImportDTO.setLedgerIds(Arrays.asList(pipeLedgerId)); } } @@ -383,6 +380,10 @@ return list; } + if (pipeList != null && pipeList.size() > 0) { + iBusLedgerPipeService.saveBatch(pipeList); + } + List busDeviceList = BusDevice.convertDeviceList(results); //保存设备信息 @@ -514,7 +515,7 @@ } -// @Cacheable(value = "alarmRuleCache", key = "#devcode") + // @Cacheable(value = "alarmRuleCache", key = "#devcode") @Override public List getDeviceRule(String devcode) { List alarmRuleValueList = this.baseMapper.getSpecialDeviceRule(devcode); @@ -523,4 +524,18 @@ } return alarmRuleValueList; } + + + @Override + public List getDevicesByCodes(List devcodes) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("DEVCODE", devcodes); + queryWrapper.eq("VALID", "1"); + return this.baseMapper.selectList(queryWrapper); + } + + @Override + public List getListByWellId(Long wellId) { + return this.baseMapper.getListByWellId(wellId); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java index 5073159..7f8bfdc 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service.impl; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -12,11 +13,8 @@ import com.casic.missiles.enums.DeviceDataEnum; import com.casic.missiles.modular.device.dao.BusDeviceMapper; import com.casic.missiles.modular.device.dao.BusLedgerPipeMapper; -import com.casic.missiles.modular.device.dto.BusLedgerPipeMonitorRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeResponseDTO; -import com.casic.missiles.modular.device.dto.MonitorDataRequestDTO; -import com.casic.missiles.modular.device.entity.BusLedgerPipe; +import com.casic.missiles.modular.device.dto.*; +import com.casic.missiles.modular.device.entity.*; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.server.CommonServer; @@ -24,11 +22,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.stream.Collectors; /** *

@@ -63,6 +60,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getPipeCode()), "PIPE_CODE", request.getPipeCode()); queryWrapper.like(ObjectUtil.isNotEmpty(request.getPosition()), "POSITION", request.getPosition()); queryWrapper.in(ObjectUtil.isNotEmpty(deptIds), "DEPTID", deptIds); + queryWrapper.eq(ObjectUtil.isNotEmpty(request.getType()), "TYPE", request.getType()); Page pipePage = this.page(page, queryWrapper); List pipeList = pipePage.getRecords(); pipeList.forEach(pipe -> { @@ -156,6 +154,12 @@ return busLedgerPipe; } + public List getList() { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("VALID", "1"); + return this.baseMapper.selectList(queryWrapper); + } + @Override public Boolean updateMonitorStatus(List tagNumbers) { UpdateWrapper updateWrapper = new UpdateWrapper<>(); @@ -163,4 +167,43 @@ updateWrapper.set("MONITOR_STATE", "3"); return this.update(updateWrapper); } + + @Transactional + @Override + public List addPositionBatch(List results) { + List list = new ArrayList<>(); + if (!CollectionUtil.isEmpty(results)) { + List busLedgerPipeList = this.getList(); + List tagCodes = busLedgerPipeList.stream().map(BusLedgerPipe::getTagNumber).collect(Collectors.toList()); + final Integer[] index = {1}; + results.forEach(busPositionImportDTO -> { + index[0]++; + //设备编号查重 + if (tagCodes.contains(busPositionImportDTO.getTagNumber())) { + list.add("第" + index[0] + "行,安装位号已存在!"); + return; + } + + }); + if (CollectionUtil.isNotEmpty(list)) { + return list; + } + List busDeviceList = BusLedgerPipe.convertDeviceList(results); + + //保存点位信息 + this.saveBatch(busDeviceList); + + } else { + list.add("导入数据不能为空"); + } + return list; + } + + @Override + public List getListByNumber(String tagNumber) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("VALID", "1"); + queryWrapper.eq("TAG_NUMBER", tagNumber); + return this.baseMapper.selectList(queryWrapper); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java index 5798675..ec2b3f5 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.modular.device.dao.SyncLogMapper; import com.casic.missiles.modular.device.entity.SyncLog; import com.casic.missiles.modular.device.service.ISyncLogDetailService; @@ -39,7 +40,8 @@ syncLog.setUpdateCount(updateCount); syncLog.setAddCount(addCount); syncLog.setDeleteCount(deleteCount); - syncLog.setCreateUser(permissionContext.getAuthService().getLoginUser().getName()); + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + syncLog.setCreateUser(null == authUser ? "admin" : authUser.getName()); return this.baseMapper.insert(syncLog) > 0 ? true : false; } diff --git a/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java index b80c202..6be2b47 100644 --- a/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java +++ b/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -1,56 +1,56 @@ -package com.casic.missiles.job.config; - -import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - - -@Slf4j -@Configuration -@Data -@ConditionalOnExpression("T(org.apache.commons.lang3.StringUtils).isNotEmpty('${xxl.job.admin.addresses}')") -public class XxlJobConfig { - @Value("${xxl.job.admin.addresses}") - private String adminAddresses; - - @Value("${xxl.job.accessToken}") - private String accessToken; - - @Value("${xxl.job.executor.appname}") - private String appname; - -// @Value("${xxl.job.executor.address}") -// private String address; - - @Value("${xxl.job.executor.ip}") - private String ip; - - @Value("${xxl.job.executor.port}") - private int port; - - @Value("${xxl.job.executor.logpath}") - private String logPath; - - @Value("${xxl.job.executor.logretentiondays}") - private int logRetentionDays; - - @Bean - public XxlJobSpringExecutor xxlJobExecutor() { - log.info(">>>>>>>>>>> xxl-job config init."); - XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); - xxlJobSpringExecutor.setAdminAddresses(adminAddresses); - xxlJobSpringExecutor.setAppname(appname); -// xxlJobSpringExecutor.setAddress(address); - xxlJobSpringExecutor.setIp(ip); - xxlJobSpringExecutor.setPort(port); - xxlJobSpringExecutor.setAccessToken(accessToken); - xxlJobSpringExecutor.setLogPath(logPath); - xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); - - return xxlJobSpringExecutor; - } -} +//package com.casic.missiles.job.config; +// +//import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +//import lombok.Data; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.beans.factory.annotation.Value; +//import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; +//import org.springframework.context.annotation.Bean; +//import org.springframework.context.annotation.Configuration; +// +// +//@Slf4j +//@Configuration +//@Data +//@ConditionalOnExpression("T(org.apache.commons.lang3.StringUtils).isNotEmpty('${xxl.job.admin.addresses}')") +//public class XxlJobConfig { +// @Value("${xxl.job.admin.addresses}") +// private String adminAddresses; +// +// @Value("${xxl.job.accessToken}") +// private String accessToken; +// +// @Value("${xxl.job.executor.appname}") +// private String appname; +// +//// @Value("${xxl.job.executor.address}") +//// private String address; +// +// @Value("${xxl.job.executor.ip}") +// private String ip; +// +// @Value("${xxl.job.executor.port}") +// private int port; +// +// @Value("${xxl.job.executor.logpath}") +// private String logPath; +// +// @Value("${xxl.job.executor.logretentiondays}") +// private int logRetentionDays; +// +// @Bean +// public XxlJobSpringExecutor xxlJobExecutor() { +// log.info(">>>>>>>>>>> xxl-job config init."); +// XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); +// xxlJobSpringExecutor.setAdminAddresses(adminAddresses); +// xxlJobSpringExecutor.setAppname(appname); +//// xxlJobSpringExecutor.setAddress(address); +// xxlJobSpringExecutor.setIp(ip); +// xxlJobSpringExecutor.setPort(port); +// xxlJobSpringExecutor.setAccessToken(accessToken); +// xxlJobSpringExecutor.setLogPath(logPath); +// xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); +// +// return xxlJobSpringExecutor; +// } +//} diff --git a/casic-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java index 798424c..3785003 100644 --- a/casic-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java +++ b/casic-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -1,37 +1,37 @@ -package com.casic.missiles.job.handler; - - -import com.xxl.job.core.biz.model.ReturnT; -import com.xxl.job.core.context.XxlJobHelper; -import com.xxl.job.core.handler.annotation.XxlJob; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; - -/** - * XxlJob开发示例(Bean模式) - * - * 开发步骤: - * 1、任务开发:在Spring Bean实例中,开发Job方法; - * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 - * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; - * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; - */ -@Slf4j -@Component -public class DemoJobHandler { - - @XxlJob(value = "demoHandler") - public ReturnT execute(String param) throws Exception { - System.out.println("调度任务Demo执行"); - XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); - -// for (int i = 0; i < 5; i++) { -// XxlJobLogger.log("beat at:" + i); -// TimeUnit.SECONDS.sleep(2); -// } - return SUCCESS; - } - -} +//package com.casic.missiles.job.handler; +// +// +//import com.xxl.job.core.biz.model.ReturnT; +//import com.xxl.job.core.context.XxlJobHelper; +//import com.xxl.job.core.handler.annotation.XxlJob; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.stereotype.Component; +// +//import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; +// +///** +// * XxlJob开发示例(Bean模式) +// * +// * 开发步骤: +// * 1、任务开发:在Spring Bean实例中,开发Job方法; +// * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 +// * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; +// * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; +// */ +//@Slf4j +//@Component +//public class DemoJobHandler { +// +// @XxlJob(value = "demoHandler") +// public ReturnT execute(String param) throws Exception { +// System.out.println("调度任务Demo执行"); +// XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); +// +//// for (int i = 0; i < 5; i++) { +//// XxlJobLogger.log("beat at:" + i); +//// TimeUnit.SECONDS.sleep(2); +//// } +// return SUCCESS; +// } +// +//} diff --git a/casic-job/src/main/java/com/casic/missiles/job/handler/OfflineJobHandler.java b/casic-job/src/main/java/com/casic/missiles/job/handler/OfflineJobHandler.java index 1e6708f..276c5db 100644 --- a/casic-job/src/main/java/com/casic/missiles/job/handler/OfflineJobHandler.java +++ b/casic-job/src/main/java/com/casic/missiles/job/handler/OfflineJobHandler.java @@ -1,26 +1,26 @@ -package com.casic.missiles.job.handler; - -import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; -import com.xxl.job.core.context.XxlJobHelper; -import com.xxl.job.core.handler.annotation.XxlJob; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -@RequiredArgsConstructor -public class OfflineJobHandler { - - private final IAlarmRecordsService iAlarmRecordsService; - - /** - * 离线判断处理 - */ - @XxlJob("offlineJobHandler") - public void offlineJobHandler() { - XxlJobHelper.log("check offline"); - iAlarmRecordsService.processOffline(); - } - -} +//package com.casic.missiles.job.handler; +// +//import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +//import com.xxl.job.core.context.XxlJobHelper; +//import com.xxl.job.core.handler.annotation.XxlJob; +//import lombok.RequiredArgsConstructor; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.stereotype.Component; +// +//@Slf4j +//@Component +//@RequiredArgsConstructor +//public class OfflineJobHandler { +// +// private final IAlarmRecordsService iAlarmRecordsService; +// +// /** +// * 离线判断处理 +// */ +// @XxlJob("offlineJobHandler") +// public void offlineJobHandler() { +// XxlJobHelper.log("check offline"); +// iAlarmRecordsService.processOffline(); +// } +// +//} diff --git a/casic-job/src/main/java/com/casic/missiles/job/handler/SuspendExpireJobHandler.java b/casic-job/src/main/java/com/casic/missiles/job/handler/SuspendExpireJobHandler.java index 5ce8fc2..3610add 100644 --- a/casic-job/src/main/java/com/casic/missiles/job/handler/SuspendExpireJobHandler.java +++ b/casic-job/src/main/java/com/casic/missiles/job/handler/SuspendExpireJobHandler.java @@ -1,65 +1,65 @@ -package com.casic.missiles.job.handler; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.casic.missiles.modular.alarm.entity.AlarmRecords; -import com.casic.missiles.modular.alarm.entity.SuspendLog; -import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; -import com.casic.missiles.modular.alarm.service.IApprovalLogService; -import com.casic.missiles.modular.alarm.service.ISuspendLogService; -import com.xxl.job.core.context.XxlJobHelper; -import com.xxl.job.core.handler.annotation.XxlJob; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.time.LocalDate; -import java.time.ZoneId; -import java.time.ZonedDateTime; -import java.util.Date; -import java.util.List; -import java.util.stream.Collectors; - -@Slf4j -@Component -@RequiredArgsConstructor -public class SuspendExpireJobHandler { - - private final ISuspendLogService iSuspendLogService; - private final IAlarmRecordsService iAlarmRecordsService; - private final IApprovalLogService iApprovalLogService; - - /** - * 挂起时间到期处理 - */ - @XxlJob("suspendExpireJobHandler") - public void suspendExpireJobHandler() { - XxlJobHelper.log("check suspend expire"); -// Date today = getTodayStart(); - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.lt("EXPIRE_TIME", new Date()); - queryWrapper.eq("VALID", "1"); - List suspendLogList = iSuspendLogService.list(queryWrapper); - if (suspendLogList != null && suspendLogList.size() > 0) { - suspendLogList.forEach(suspendLog -> { - suspendLog.setValid("0"); - }); - iSuspendLogService.updateBatchById(suspendLogList); - //更新最新状态 - List alarmIds = suspendLogList.stream().map(SuspendLog::getAlarmId).collect(Collectors.toList()); - List alarmRecordsList = iAlarmRecordsService.changeProcessStatus(alarmIds); - //添加流转日志 - iApprovalLogService.saveSuspendLogs(alarmRecordsList); - } - } - - private Date getTodayStart() { - // 获取当天日期 - LocalDate today = LocalDate.now(); - // 当天日期与午夜时间的组合 - ZonedDateTime todayStart = today.atStartOfDay(ZoneId.systemDefault()); - - // 转换为java.util.Date - return Date.from(todayStart.toInstant()); - } - -} +//package com.casic.missiles.job.handler; +// +//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +//import com.casic.missiles.modular.alarm.entity.AlarmRecords; +//import com.casic.missiles.modular.alarm.entity.SuspendLog; +//import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +//import com.casic.missiles.modular.alarm.service.IApprovalLogService; +//import com.casic.missiles.modular.alarm.service.ISuspendLogService; +//import com.xxl.job.core.context.XxlJobHelper; +//import com.xxl.job.core.handler.annotation.XxlJob; +//import lombok.RequiredArgsConstructor; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.stereotype.Component; +// +//import java.time.LocalDate; +//import java.time.ZoneId; +//import java.time.ZonedDateTime; +//import java.util.Date; +//import java.util.List; +//import java.util.stream.Collectors; +// +//@Slf4j +//@Component +//@RequiredArgsConstructor +//public class SuspendExpireJobHandler { +// +// private final ISuspendLogService iSuspendLogService; +// private final IAlarmRecordsService iAlarmRecordsService; +// private final IApprovalLogService iApprovalLogService; +// +// /** +// * 挂起时间到期处理 +// */ +// @XxlJob("suspendExpireJobHandler") +// public void suspendExpireJobHandler() { +// XxlJobHelper.log("check suspend expire"); +//// Date today = getTodayStart(); +// QueryWrapper queryWrapper = new QueryWrapper<>(); +// queryWrapper.lt("EXPIRE_TIME", new Date()); +// queryWrapper.eq("VALID", "1"); +// List suspendLogList = iSuspendLogService.list(queryWrapper); +// if (suspendLogList != null && suspendLogList.size() > 0) { +// suspendLogList.forEach(suspendLog -> { +// suspendLog.setValid("0"); +// }); +// iSuspendLogService.updateBatchById(suspendLogList); +// //更新最新状态 +// List alarmIds = suspendLogList.stream().map(SuspendLog::getAlarmId).collect(Collectors.toList()); +// List alarmRecordsList = iAlarmRecordsService.changeProcessStatus(alarmIds); +// //添加流转日志 +// iApprovalLogService.saveSuspendLogs(alarmRecordsList); +// } +// } +// +// private Date getTodayStart() { +// // 获取当天日期 +// LocalDate today = LocalDate.now(); +// // 当天日期与午夜时间的组合 +// ZonedDateTime todayStart = today.atStartOfDay(ZoneId.systemDefault()); +// +// // 转换为java.util.Date +// return Date.from(todayStart.toInstant()); +// } +// +//} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java new file mode 100644 index 0000000..fc881a1 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.data.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 外协管盯 前端控制器 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RestController +@RequestMapping("/system/dataGasOther") +public class DataGasOtherController { + +} + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java new file mode 100644 index 0000000..b5f3627 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.data.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 外协管盯 Mapper 接口 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Mapper +public interface DataGasOtherMapper extends BaseMapper { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml new file mode 100644 index 0000000..8ce1455 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID, DEVCODE, WELL_CODE, WELL_NUMBER, GASVAL, VBAT, BATSTA, SIN, RSRP, SINR, UPTIME, LOGTIME, SIG, TEMP, SS_STATE + + + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java new file mode 100644 index 0000000..53972ba --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java @@ -0,0 +1,94 @@ +package com.casic.missiles.modular.data.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 外协管盯 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Builder +@Data +@TableName("data_gas_other") +@ApiModel(value = "DataGasOther对象", description = "外协管盯") +public class DataGasOther implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId("ID") + private Long id; + + @ApiModelProperty("设备编号") + @TableField("DEVCODE") + private String devcode; + + @ApiModelProperty("点位编号") + @TableField("WELL_CODE") + private String wellCode; + + @ApiModelProperty("位号") + @TableField("WELL_NUMBER") + private String wellNumber; + + @ApiModelProperty("气体浓度采样值") + @TableField("GASVAL") + private String gasval; + + @ApiModelProperty("设备电池电压值(毫伏)") + @TableField("VBAT") + private String vbat; + + @ApiModelProperty("电池状态0 正常、 1 低电告警、2 关机") + @TableField("BATSTA") + private String batsta; + + @ApiModelProperty("接收信号强度等级") + @TableField("SIN") + private String sin; + + @ApiModelProperty("接收信号参考质量 服务小 区的 RSRP 值") + @TableField("RSRP") + private String rsrp; + + @ApiModelProperty("信噪比") + @TableField("SINR") + private String sinr; + + @ApiModelProperty("采集时间") + @TableField("UPTIME") + private Date uptime; + + @ApiModelProperty("上传时间") + @TableField("LOGTIME") + private Date logtime; + + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态,0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java index 86077b8..f4d4417 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java @@ -76,4 +76,17 @@ private Date logtime; + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态:0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java new file mode 100644 index 0000000..842ca0b --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.data.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.data.entity.DataGasOther; + +/** + *

+ * 外协管盯 服务类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +public interface IDataGasOtherService extends IService { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java new file mode 100644 index 0000000..4c660e9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java @@ -0,0 +1,226 @@ +package com.casic.missiles.modular.data.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.enums.DeviceTypeEnum; +import com.casic.missiles.enums.DictEnum; +import com.casic.missiles.modular.alarm.dto.AlarmDeviceRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.AlarmRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.BusAlarmLedgerDTO; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.data.dao.DataGasMapper; +import com.casic.missiles.modular.data.dao.DataGasOtherMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import com.casic.missiles.modular.data.entity.DataTubeOther; +import com.casic.missiles.modular.data.service.IDataAbstractService; +import com.casic.missiles.modular.data.service.IDataGasOtherService; +import com.casic.missiles.modular.data.service.ITrackLogService; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Optional; + +/** + *

+ * 外协管盯 服务实现类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RequiredArgsConstructor +@Service +public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { + + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + private final DataGasMapper dataGasMapper; + private final IAlarmRecordsService alarmRecordsService; + private final IAlarmRuleService alarmRuleService; + private final ITrackLogService iTrackLogService; + private final IBusDeviceService busDeviceService; + + @Override + public void process(String dataContent) { + + //解析数据+根据业务处理存储数据 + JSONObject json = JSONObject.parseObject(dataContent); + String devCode = json.get("devCode").toString(); + JSONObject jsonObject = json.getJSONObject("mBody"); + if (mType[0].equals(json.get("mType")) || mType[3].equals(json.get("mType"))) {//存储上报数据 + this.processNormalData(jsonObject, devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + this.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.TubeOther.name().equals(json.get("devType"))) { + if ("TubeOtherConfigSuccess".equals(jsonObject.get("bType"))) { +// deviceConfigManager.updateStatus(devCode); + } + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } else if (mType[4].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); +// imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; + try { + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); + } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + } + } + + @Transactional + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.getString("cell"); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = jsonObject.getJSONArray("datas"); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + String bfcf = busDeviceService.getBfcf(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).getString("gasval"); + String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); + String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); + String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataGasOther.builder() + .wellCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .wellNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .devcode(devCode) +// .cell(cell) + .gasval(gas) + .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime))) + .logtime(new Date()) + .vbat(vbat) + .batsta(batsta) + .rsrp(rsrp) + .sin(pci) + .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) + .build());//存储采集数据 + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) continue; + + //3.清除设备告警 + alarmRecordsService.cancelDeviceAlarm(devCode); + //4.存报警 + //若没绑定井,则不产生报警 + boolean alarmFlag = false; + if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { + //获取报警规则 + List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); + for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { + if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && + Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { + alarmFlag = true; + //写入报警 + //1、判断报警是否已存在 + if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.TubeOther.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); + //7.更新管线状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java index d248540..b33a1ee 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java @@ -91,7 +91,6 @@ } - public List getBusAlarmLedgerList(String devCode) { return this.dataGasMapper.getListByDevCode(devCode); } @@ -113,6 +112,13 @@ for (int i = 0; i < jsonArray.size(); i++) { try { String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) .findFirst(); @@ -175,18 +181,18 @@ alarmRecordsService.cancelDeviceAlarm(devCode); //4.存报警 //若没绑定井,则不产生报警 - boolean alarmFlag = false; + boolean alarmFlag = false; if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { //获取报警规则 List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { - alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); } break; } @@ -197,7 +203,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及设备状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新监测井状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java index e848fce..6297093 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java @@ -84,42 +84,78 @@ } - @Transactional - public void processAlarmData(JSONObject jsonObject, String devCode) { - JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + public void processEventAlarm(String devCode, String eventTypeCode, String logTime, String eventValue) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - //获取报警事件 - List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - - List busWellDTOList = dataGasMapper.getListByDevCode(devCode); - //若没绑定井,则不产生报警 - if (busWellDTOList != null && busWellDTOList.size() > 0) { - - for (int i = 0; i < jsonArray.size(); i++) { + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + //特殊处理消警 + if ("0".equals(eventValue)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, eventTypeCode); + } + return; } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> eventTypeCode.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 - if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + if (!alarmDeviceRuleResponseDTO.isPresent()) return; //1.查询是否已存在该类报警 - if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) return; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); - - + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + } + } + } + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + try { + String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmEventCode)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } } } } @@ -169,7 +205,76 @@ .rightVibrateAlarm(VibR) .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(uptime))) .logtime(new Date()) - .build());//存储采集数据 + .build()); + + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + ruleResponseDTOList.forEach(ruleResponseDTO -> { + + if ("Sloping".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Sloping)&&(!alarmRecordsService.isWatchAlarms(devCode,"Sloping"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Sloping", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Sloping)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Sloping"); + + } + } + if ("Destroy".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Destroy)&&(!alarmRecordsService.isWatchAlarms(devCode,"Destroy"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Destroy", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Destroy)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Destroy"); + + } + } + if ("Leak".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Leak)&&(!alarmRecordsService.isWatchAlarms(devCode,"Leak"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Leak", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Leak)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Leak"); + + } + } + if ("DiscL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscL)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscL"); + + } + } + if ("DiscR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscR)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscR"); + } + } + + if ("VibL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibL)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibL"); + } + } + if ("VibR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibR)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibR"); + } + } + }); + +// //处理报警事件 +// processEventAlarm(devCode,"Sloping",uptime,Sloping); +// processEventAlarm(devCode,"Destroy",uptime,Destroy); +// processEventAlarm(devCode,"Leak",uptime,Leak); +// processEventAlarm(devCode,"DiscL",uptime,DiscL); +// processEventAlarm(devCode,"DiscR",uptime,DiscR); +// processEventAlarm(devCode,"VibL",uptime,VibL); +// processEventAlarm(devCode,"VibR",uptime,VibR); + //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -197,7 +302,7 @@ if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && gas >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), gas)) { @@ -213,7 +318,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R,alarmFlag?"燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R, alarmFlag ? "燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java index f913775..895d201 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java @@ -89,6 +89,7 @@ String bfcf = busDeviceService.getBfcf(devCode); if (DictEnum.BF_ON.equals(bfcf)) { JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); //获取报警事件 List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); List busWellDTOList = dataGasMapper.getListByDevCode(devCode); @@ -96,25 +97,43 @@ if (busWellDTOList != null && busWellDTOList.size() > 0) { for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 if (!alarmDeviceRuleResponseDTO.isPresent()) continue; //1.查询是否已存在该类报警 if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { @@ -141,6 +160,9 @@ String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); gas = String.format("%.2f", Double.valueOf(gas)); //1.存数据 save(DataTubeOther.builder() @@ -156,6 +178,9 @@ .rsrp(rsrp) .sin(pci) .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) .build());//存储采集数据 //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -186,7 +211,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 98e736b..2288075 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -216,5 +216,15 @@ public ReturnDTO syncDeviceStatus() { return ReturnUtil.success(iBusDeviceService.syncDeviceStatus()); } + + @ApiOperation("根据闸井id获取设备信息") + @PostMapping("/getListByWellId") + @ResponseBody + public ReturnDTO getListByWellId(@RequestBody IdDTO idDTO) { + Assert.isFalse(ObjectUtil.isEmpty(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iBusDeviceService.getListByWellId(idDTO.getId())); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java index 72a2d84..d6d9743 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java @@ -85,6 +85,7 @@ return ReturnUtil.success(iBusLedgerService.detail(idDTO.getId())); } + /** * 同步三级部门 * diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java index 9e412d2..4316b56 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java @@ -1,22 +1,33 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.response.ErrorResponseData; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; +import com.casic.missiles.modular.device.dto.BusPositionImportDTO; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.ReturnUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataAccessException; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; /** @@ -40,8 +51,44 @@ @PostMapping("/addPosition") @ResponseBody public ReturnDTO addPosition(@RequestBody BusLedgerPipe busLedgerPipe) { + + List busLedgerPipeList = iBusLedgerPipeService.getListByNumber(busLedgerPipe.getTagNumber()); + if(busLedgerPipeList!=null&&busLedgerPipeList.size()>0){ + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE,"安装位号已存!!!"); + } + Long id =IdUtil.getSnowflake(1,2).nextId(); + busLedgerPipe.setId(id); iBusLedgerPipeService.save(busLedgerPipe); - return ReturnUtil.success(busLedgerPipe.getId()); + return ReturnUtil.success(id); + } + + @ApiOperation("批量导入") + @RequestMapping(value = "/batchImport", method = RequestMethod.POST) + @ResponseBody + public Object batchImport(@RequestParam("file") MultipartFile file) { + List results = new ArrayList<>(); + try { + results = this.importExcel(BusPositionImportDTO.class, file, null, null); + List list = iBusLedgerPipeService.addPositionBatch(results); + if (!CollectionUtil.isEmpty(list)) { + //获取校验报错信息 + return new ErrorResponseData(list.get(0)); + } + } catch (Exception e) { + return catchMybatisPlusException(e, "导入位置信息失败"); + } + return ResponseData.success(); + } + + private ResponseData catchMybatisPlusException(Exception e, String errorMsg) { + if (e instanceof DataAccessException) { + DataAccessException mybatisPlusException = (DataAccessException) e; + String message = mybatisPlusException.getRootCause().getMessage(); + if (message.contains("Duplicate entry '")) { + return new ErrorResponseData("安装位号重复:" + message.replaceAll("Duplicate entry '", "").replaceAll("' for key 'DEVCODE'", "")); + } + } + return new ErrorResponseData(errorMsg); } @ApiOperation("编辑点位") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java index d1e08a8..d938876 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java @@ -51,6 +51,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getOperatorName()), "CREATE_USER", request.getOperatorName()); queryWrapper.ge(ObjectUtil.isNotEmpty(request.getStartTime()), "START_TIME", request.getStartTime()); queryWrapper.le(ObjectUtil.isNotEmpty(request.getEndTime()), "END_TIME", request.getEndTime()); + queryWrapper.orderByDesc("START_TIME"); return ReturnUtil.success(super.packForBT(iSyncLogService.page(page, queryWrapper))); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java index 5ee5291..23ddee9 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java @@ -73,4 +73,12 @@ " where bd.DEVCODE= #{devcode} and bd.VALID=1 " + ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD asc") List getDeviceTypeRule(@Param("devcode") String devcode); + + + @Select("SELECT bd.* from bus_device bd " + + "left JOIN bus_device_ledger bl on bd.id= bl.DEVICE_ID and bl.VALID=1 " + + "LEFT JOIN bus_ledger_all_view bv on bv.id= bl.LEDGER_ID and bv.type= bl.TYPE and bv.VALID=1 " + + "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") + List getListByWellId(@Param("wellId") Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java index e1d16c4..a4c3f7a 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java @@ -37,7 +37,7 @@ @Select("SELECT b.ORG_ID,b.ORG_CODE,b.ORG_NAME,b.PARENT_ID FROM `bus_sync_org_relation` b WHERE b.DEL_FLAG =0 and b.PARENT_ID = #{syncId} ") List synDept(@Param("syncId") String syncId); - @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view ") + @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view where VALID=1") List getBusLedgers(); @Select("SELECT DEVCODE FROM `bus_device` where VALID>0 ") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml index 99ef10b..c6d1fff 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml @@ -29,6 +29,7 @@ bp.DEVICE_MODEL as deviceModel, bt.TYPE_NAME as typeName, + bp.DATA_SERVICE as deviceCategory, bm.`NAME` as manufactureName, bl.tagNumber as tagNumber, bl.id as ledgerId, @@ -81,6 +82,10 @@ and bd.LOGTIME #{request.logTime2} + + and bp.DATA_SERVICE =#{request.deviceCategory} + + ORDER BY bd.INSTALL_DATE DESC diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml index bdadb6a..d3f4684 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml @@ -40,7 +40,7 @@ `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + AND bdl.VALID = 1 JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -99,8 +99,8 @@ bm.`NAME` as manufactureName FROM `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE - LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID and bdl.type=blp.type + AND bdl.VALID = 1 LEFT JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -117,7 +117,9 @@ WITH station_temp as(SELECT bl.ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID FROM `bus_ledger` bl where bl.VALID=1 and bl.TYPE =2) - select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME from station_temp bl + select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME,bd.DEVCODE from station_temp bl left join bus_device_ledger bdl on bdl.LEDGER_ID = bl.ID and bdl.TYPE =2 and bdl.valid=1 left join bus_device bd on bd.id= bdl.DEVICE_ID and bd.VALID=1 order by bl.ID diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml index 7b92b04..1d97c64 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml @@ -184,7 +184,7 @@ WHERE EQ_LOCNO like 'N%' and - EQ_CATEGORY in (1,3) + EQ_CATEGORY in (1,2,3,5) diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java index 859cf08..143b42d 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java @@ -23,6 +23,9 @@ @ApiModelProperty("设备类型id") private Long typeId; + @ApiModelProperty("产品名称") + private String productName; + @ApiModelProperty("指令集合") private List commandConfigList; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java index 646610b..2cb5894 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("最新上传结束时间") private String logTime2; + + @ApiModelProperty("设备类别(0:自有设备,1:数据服务)") + private String deviceCategory; } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java index 8c95537..28b30fa 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java @@ -44,6 +44,9 @@ @ExcelProperty("关联管线") private String pipeCode; + @ExcelProperty("监测类型") + private String monitorType; + private String watchObject; private Long deviceType; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java index 0980c34..ac5daf0 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java @@ -24,4 +24,7 @@ @ApiModelProperty("详细位置") private String position; + @ApiModelProperty("1:其他,3:管线") + private String type; + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java new file mode 100644 index 0000000..bce7ebd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.device.dto; + + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class BusPositionImportDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + + @ExcelProperty("管线编号") + private String pipeCode; + + @ExcelProperty("安装位号") + private String tagNumber; + + @ExcelProperty("经度(高德)") + private String lngGaode; + + @ExcelProperty("纬度(高德)") + private String latGaode; + + @ExcelProperty("详细位置") + private String position; + + @ExcelProperty("管理单位") + private Long deptid; + + @ExcelProperty("位置类别") + private String type; + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java index 58faa0e..d72ae78 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java @@ -16,13 +16,13 @@ private String deviceId; //移动命令:left right up down left_up left_down right_up right_down GOTO_PRESET - @ApiModelProperty("移动命令") + @ApiModelProperty("移动命令(left right up down left_up left_down right_up right_down)") private String command; - @ApiModelProperty("速度") + @ApiModelProperty("速度,一般传100") private String speed; - @ApiModelProperty("启停命令") + @ApiModelProperty("启停命令(0:开始,1:结束)") private String cameraAction; @ApiModelProperty("预置点编号") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java index b4ec73c..5a3d0b0 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java @@ -66,7 +66,7 @@ private String powerSupplyMode; - @ApiModelProperty("是否结束数据服务") + @ApiModelProperty("是否结束数据服务(1:是,0:否)") @TableField("DATA_SERVICE") private String dataService; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java index 1184995..407e3c1 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java @@ -193,10 +193,14 @@ @TableField(exist = false) private String bfztName; + @ApiModelProperty("设备类别(0:自有设备,1:数据服务)") + @TableField(exist = false) + private String deviceCategory; + public BusDevice() { } - public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds) { + public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds, String monitorType) { this.devcode = devcode; this.deviceType = deviceType; this.productId = productId; @@ -204,6 +208,7 @@ this.installDate = installDate; this.watchObject = watchObject; this.ledgerIds = ledgerIds; + this.monitorType = monitorType; } public static List convertDeviceList(List dtoList) { @@ -227,7 +232,8 @@ deviceImportDTO.getValid(), deviceImportDTO.getInstallDate(), deviceImportDTO.getWatchObject(), - deviceImportDTO.getLedgerIds())); + deviceImportDTO.getLedgerIds(), + deviceImportDTO.getMonitorType())); }); return busDeviceList; } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java index 12b52de..1ac8455 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java @@ -1,16 +1,20 @@ package com.casic.missiles.modular.device.entity; +import cn.hutool.core.util.IdUtil; 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 com.casic.missiles.modular.device.dto.BusPositionImportDTO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import java.io.Serializable; +import java.util.ArrayList; import java.util.Date; +import java.util.List; /** *

@@ -29,7 +33,7 @@ private static final long serialVersionUID = 1L; @ApiModelProperty("主键") - @TableId(value = "ID", type = IdType.AUTO) +// @TableId(value = "ID", type = IdType.AUTO) private Long id; @ApiModelProperty("编号") @@ -60,6 +64,10 @@ @TableField("DEPTID") private Long deptid; + @ApiModelProperty("类别(1:其他,3:管线)") + @TableField("`TYPE`") + private String type; + @ApiModelProperty("责任部门") @TableField("RESPONSIBLE_DEPT") private Long responsibleDept; @@ -110,9 +118,10 @@ public BusLedgerPipe() { } - public BusLedgerPipe(String pipeCode, String ledgerName, String tagNumber, + public BusLedgerPipe(Long id,String pipeCode, String ledgerName, String tagNumber, String lngGaode, String latGaode, String position, - Long deptid, String devcode) { + Long deptid, String devcode, String type) { + this.id=id; this.pipeCode = pipeCode; this.ledgerName = ledgerName; this.tagNumber = tagNumber; @@ -121,5 +130,26 @@ this.position = position; this.deptid = deptid; this.devcode = devcode; + this.type = type; } + + public static List convertDeviceList(List dtoList) { + + + List busDeviceList = new ArrayList<>(); + dtoList.forEach(positionImportDTO -> { + + busDeviceList.add(new BusLedgerPipe(IdUtil.getSnowflake(1,2).nextId(),positionImportDTO.getPipeCode(), + positionImportDTO.getTagNumber(), + positionImportDTO.getTagNumber(), + positionImportDTO.getLngGaode(), + positionImportDTO.getLatGaode(), + positionImportDTO.getPosition(), + positionImportDTO.getDeptid(), + "", + positionImportDTO.getType())); + }); + return busDeviceList; + } + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java index aaaa409..63c0576 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java @@ -52,4 +52,8 @@ List getDeviceRule(String devcode); + List getDevicesByCodes(List devcodes); + + List getListByWellId(Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java index 14f6a93..8692383 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java @@ -2,11 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; -import com.casic.missiles.core.datascope.DataScope; -import com.casic.missiles.modular.device.dto.BusLedgerPipeMonitorRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeResponseDTO; -import com.casic.missiles.modular.device.dto.MonitorDataRequestDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import java.util.List; @@ -26,17 +22,21 @@ Page monitorPipePageList(Page page, BusLedgerPipeMonitorRequestDTO request); - BusLedgerPipeResponseDTO detail(Long id,String devcode); + BusLedgerPipeResponseDTO detail(Long id, String devcode); - List> watchDataByPipe(MonitorDataRequestDTO requestDTO); + List> watchDataByPipe(MonitorDataRequestDTO requestDTO); - List> pipeList(); + List> pipeList(); - List> deviceList(); + List> deviceList(); BusLedgerPipe saveBusLedgerPipe(BusLedgerPipe busLedgerPipe); Boolean updateMonitorStatus(List tagNumbers); + List addPositionBatch(List results); + + List getListByNumber(String tagNumber); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java index 66ed812..ad72230 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java @@ -12,9 +12,12 @@ import com.casic.missiles.modular.device.dto.BusConfigOtherDTO; import com.casic.missiles.modular.device.dto.BusConfigRequestDTO; import com.casic.missiles.modular.device.entity.BusConfig; +import com.casic.missiles.modular.device.entity.BusDevice; import com.casic.missiles.modular.device.service.IBusConfigService; +import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.HttpClientUtils; import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -22,6 +25,9 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.LinkedBlockingDeque; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; /** *

@@ -36,6 +42,11 @@ public class BusConfigServiceImpl extends ServiceImpl implements IBusConfigService { private final AbstractPermissionContext abstractPermissionContext; + private final IBusDeviceService iBusDeviceService; + private final ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(3, 6, 60, TimeUnit.SECONDS, new LinkedBlockingDeque<>(10)); + + @Value("${casic.brSendConfigUrl}") + private String brSendConfigUrl; @Transactional @Override @@ -105,6 +116,42 @@ .operator(user != null ? user.getId() : null) .operatorName(user != null ? user.getName() : "").build()); }); + + + threadPoolExecutor.execute( + () -> { + //发送第三方下发: + if (busConfigOtherDTO.getProductName().contains("管网哨兵")) { + List busDeviceList = iBusDeviceService.getDevicesByCodes(devcodes); + for (BusDevice busDevice : busDeviceList) { + if (ObjectUtil.isAllNotEmpty(busDevice.getNbProductId(), busDevice.getNbDeviceId())) { + Map commandMap = new HashMap<>(); + commandMap.put("productId", busDevice.getNbProductId()); + commandMap.put("devCode", busDevice.getDevcode()); + commandMap.put("deviceId", busDevice.getNbDeviceId()); + commandMap.put("cmdList", busConfigOtherDTO.getCommandConfigList()); + HttpClientUtils.post(brSendConfigUrl+"/tube/config/send", JSON.toJSONString(commandMap)); + } + } + } else if (busConfigOtherDTO.getProductName().contains("智能警示桩")) { + + List busDeviceList = iBusDeviceService.getDevicesByCodes(devcodes); + for (BusDevice busDevice : busDeviceList) { + if (ObjectUtil.isAllNotEmpty(busDevice.getNbProductId(), busDevice.getNbDeviceId())) { + Map commandMap = new HashMap<>(); + commandMap.put("productId", busDevice.getNbProductId()); + commandMap.put("devCode", busDevice.getDevcode()); + commandMap.put("deviceId", busDevice.getNbDeviceId()); + commandMap.put("cmdList", busConfigOtherDTO.getCommandConfigList()); + HttpClientUtils.post(brSendConfigUrl+"/sentinel/config/send", JSON.toJSONString(commandMap)); + } + } + + } + } + ); + + return this.saveBatch(busConfigs); // List> mapList = new ArrayList<>(); // Map commandMap = new HashMap<>(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java index 60d15e5..bae6902 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java @@ -3,6 +3,7 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -80,6 +81,7 @@ @Override public Page listPage(Page page, BusDeviceDTO request) { + page.setOptimizeCountSql(false); Page busDevicePage = this.baseMapper.pageList(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List busDeviceList = busDevicePage.getRecords(); busDeviceList.forEach(busDevice -> { @@ -227,7 +229,7 @@ if (deviceDataEnum.getTableColumns().contains("cell")) { String[] queryColumns = deviceDataEnum.getQueryColumns().split(",", 4); resultMap = this.baseMapper.cellAnalysis(deviceDataEnum.getTableName(), - "cell,uptime", + deviceDataEnum.getCellColumn(), queryColumns[0], queryColumns[1], deviceDataEnum.getOrderColumn(), @@ -265,14 +267,13 @@ } else { List busDeviceLedgers = busDeviceLedgerService.getListByDeviceId(busDevice.getId()); //没绑定关系,先绑定 - if (ObjectUtil.isNotEmpty(busDeviceLedgers)) { + if (busDeviceLedgers == null || busDeviceLedgers.size() < 1) { busDeviceLedgerService.saveDeviceLedger(busDevice.getId(), busDevice.getLedgerIds(), busDevice.getWatchObject()); } else { //已绑定,判断是否位置变了 List ledgerIdsPre = busDeviceLedgers.stream().map(BusDeviceLedger::getLedgerId).collect(Collectors.toList()); if (ledgerIds.containsAll(ledgerIdsPre) && ledgerIdsPre.containsAll(ledgerIds)) { } else { - busDeviceLedgerService.deleteDeviceLedgers(Arrays.asList(busDevice.getId())); busDeviceLedgerService.saveDeviceLedger(busDevice.getId(), busDevice.getLedgerIds(), busDevice.getWatchObject()); } } @@ -304,6 +305,8 @@ List codeList = iBusLedgerService.getCodeLists(); //获取管线编号 List pipeCodeList = iBusLedgerService.getPipeCodeList(); + List pipeList = new ArrayList<>(); + final Integer[] index = {1}; results.forEach(deviceImportDTO -> { index[0]++; @@ -357,22 +360,16 @@ return; } //新增点位 - if ("3".equals(deviceImportDTO.getWatchObject())) { + if ("3".equals(deviceImportDTO.getWatchObject()) || "1".equals(deviceImportDTO.getWatchObject())) { //toDo:安装位号一致,入一次即可 //为管线 - BusLedgerPipe busLedgerPipe = new BusLedgerPipe(deviceImportDTO.getPipeCode(), deviceImportDTO.getTagNumber(), + Long pipeLedgerId = IdUtil.getSnowflake(1, 2).nextId(); + BusLedgerPipe busLedgerPipe = new BusLedgerPipe(pipeLedgerId, deviceImportDTO.getPipeCode(), deviceImportDTO.getTagNumber(), deviceImportDTO.getTagNumber(), deviceImportDTO.getLng(), deviceImportDTO.getLat(), - deviceImportDTO.getPosition(), deviceImportDTO.getDeptid(), deviceImportDTO.getDevCode()); - busLedgerPipe = iBusLedgerPipeService.saveBusLedgerPipe(busLedgerPipe); - deviceImportDTO.setLedgerIds(Arrays.asList(busLedgerPipe.getId())); - }else if("1".equals(deviceImportDTO.getWatchObject())){ - //新增闸井 - BusLedger busLedger = new BusLedger(deviceImportDTO.getTagNumber(), - deviceImportDTO.getTagNumber(),deviceImportDTO.getTagNumber(), - deviceImportDTO.getLng(),deviceImportDTO.getLat(),deviceImportDTO.getPosition(), - deviceImportDTO.getDeptid()); - this.iBusLedgerService.save(busLedger); - deviceImportDTO.setLedgerIds(Arrays.asList(busLedger.getId())); + deviceImportDTO.getPosition(), deviceImportDTO.getDeptid(), deviceImportDTO.getDevCode(), deviceImportDTO.getWatchObject()); +// busLedgerPipe = iBusLedgerPipeService.saveBusLedgerPipe(busLedgerPipe); + pipeList.add(busLedgerPipe); + deviceImportDTO.setLedgerIds(Arrays.asList(pipeLedgerId)); } } @@ -383,6 +380,10 @@ return list; } + if (pipeList != null && pipeList.size() > 0) { + iBusLedgerPipeService.saveBatch(pipeList); + } + List busDeviceList = BusDevice.convertDeviceList(results); //保存设备信息 @@ -514,7 +515,7 @@ } -// @Cacheable(value = "alarmRuleCache", key = "#devcode") + // @Cacheable(value = "alarmRuleCache", key = "#devcode") @Override public List getDeviceRule(String devcode) { List alarmRuleValueList = this.baseMapper.getSpecialDeviceRule(devcode); @@ -523,4 +524,18 @@ } return alarmRuleValueList; } + + + @Override + public List getDevicesByCodes(List devcodes) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("DEVCODE", devcodes); + queryWrapper.eq("VALID", "1"); + return this.baseMapper.selectList(queryWrapper); + } + + @Override + public List getListByWellId(Long wellId) { + return this.baseMapper.getListByWellId(wellId); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java index 5073159..7f8bfdc 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service.impl; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -12,11 +13,8 @@ import com.casic.missiles.enums.DeviceDataEnum; import com.casic.missiles.modular.device.dao.BusDeviceMapper; import com.casic.missiles.modular.device.dao.BusLedgerPipeMapper; -import com.casic.missiles.modular.device.dto.BusLedgerPipeMonitorRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeResponseDTO; -import com.casic.missiles.modular.device.dto.MonitorDataRequestDTO; -import com.casic.missiles.modular.device.entity.BusLedgerPipe; +import com.casic.missiles.modular.device.dto.*; +import com.casic.missiles.modular.device.entity.*; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.server.CommonServer; @@ -24,11 +22,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.stream.Collectors; /** *

@@ -63,6 +60,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getPipeCode()), "PIPE_CODE", request.getPipeCode()); queryWrapper.like(ObjectUtil.isNotEmpty(request.getPosition()), "POSITION", request.getPosition()); queryWrapper.in(ObjectUtil.isNotEmpty(deptIds), "DEPTID", deptIds); + queryWrapper.eq(ObjectUtil.isNotEmpty(request.getType()), "TYPE", request.getType()); Page pipePage = this.page(page, queryWrapper); List pipeList = pipePage.getRecords(); pipeList.forEach(pipe -> { @@ -156,6 +154,12 @@ return busLedgerPipe; } + public List getList() { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("VALID", "1"); + return this.baseMapper.selectList(queryWrapper); + } + @Override public Boolean updateMonitorStatus(List tagNumbers) { UpdateWrapper updateWrapper = new UpdateWrapper<>(); @@ -163,4 +167,43 @@ updateWrapper.set("MONITOR_STATE", "3"); return this.update(updateWrapper); } + + @Transactional + @Override + public List addPositionBatch(List results) { + List list = new ArrayList<>(); + if (!CollectionUtil.isEmpty(results)) { + List busLedgerPipeList = this.getList(); + List tagCodes = busLedgerPipeList.stream().map(BusLedgerPipe::getTagNumber).collect(Collectors.toList()); + final Integer[] index = {1}; + results.forEach(busPositionImportDTO -> { + index[0]++; + //设备编号查重 + if (tagCodes.contains(busPositionImportDTO.getTagNumber())) { + list.add("第" + index[0] + "行,安装位号已存在!"); + return; + } + + }); + if (CollectionUtil.isNotEmpty(list)) { + return list; + } + List busDeviceList = BusLedgerPipe.convertDeviceList(results); + + //保存点位信息 + this.saveBatch(busDeviceList); + + } else { + list.add("导入数据不能为空"); + } + return list; + } + + @Override + public List getListByNumber(String tagNumber) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("VALID", "1"); + queryWrapper.eq("TAG_NUMBER", tagNumber); + return this.baseMapper.selectList(queryWrapper); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java index 5798675..ec2b3f5 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.modular.device.dao.SyncLogMapper; import com.casic.missiles.modular.device.entity.SyncLog; import com.casic.missiles.modular.device.service.ISyncLogDetailService; @@ -39,7 +40,8 @@ syncLog.setUpdateCount(updateCount); syncLog.setAddCount(addCount); syncLog.setDeleteCount(deleteCount); - syncLog.setCreateUser(permissionContext.getAuthService().getLoginUser().getName()); + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + syncLog.setCreateUser(null == authUser ? "admin" : authUser.getName()); return this.baseMapper.insert(syncLog) > 0 ? true : false; } diff --git a/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java index b80c202..6be2b47 100644 --- a/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java +++ b/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -1,56 +1,56 @@ -package com.casic.missiles.job.config; - -import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - - -@Slf4j -@Configuration -@Data -@ConditionalOnExpression("T(org.apache.commons.lang3.StringUtils).isNotEmpty('${xxl.job.admin.addresses}')") -public class XxlJobConfig { - @Value("${xxl.job.admin.addresses}") - private String adminAddresses; - - @Value("${xxl.job.accessToken}") - private String accessToken; - - @Value("${xxl.job.executor.appname}") - private String appname; - -// @Value("${xxl.job.executor.address}") -// private String address; - - @Value("${xxl.job.executor.ip}") - private String ip; - - @Value("${xxl.job.executor.port}") - private int port; - - @Value("${xxl.job.executor.logpath}") - private String logPath; - - @Value("${xxl.job.executor.logretentiondays}") - private int logRetentionDays; - - @Bean - public XxlJobSpringExecutor xxlJobExecutor() { - log.info(">>>>>>>>>>> xxl-job config init."); - XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); - xxlJobSpringExecutor.setAdminAddresses(adminAddresses); - xxlJobSpringExecutor.setAppname(appname); -// xxlJobSpringExecutor.setAddress(address); - xxlJobSpringExecutor.setIp(ip); - xxlJobSpringExecutor.setPort(port); - xxlJobSpringExecutor.setAccessToken(accessToken); - xxlJobSpringExecutor.setLogPath(logPath); - xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); - - return xxlJobSpringExecutor; - } -} +//package com.casic.missiles.job.config; +// +//import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +//import lombok.Data; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.beans.factory.annotation.Value; +//import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; +//import org.springframework.context.annotation.Bean; +//import org.springframework.context.annotation.Configuration; +// +// +//@Slf4j +//@Configuration +//@Data +//@ConditionalOnExpression("T(org.apache.commons.lang3.StringUtils).isNotEmpty('${xxl.job.admin.addresses}')") +//public class XxlJobConfig { +// @Value("${xxl.job.admin.addresses}") +// private String adminAddresses; +// +// @Value("${xxl.job.accessToken}") +// private String accessToken; +// +// @Value("${xxl.job.executor.appname}") +// private String appname; +// +//// @Value("${xxl.job.executor.address}") +//// private String address; +// +// @Value("${xxl.job.executor.ip}") +// private String ip; +// +// @Value("${xxl.job.executor.port}") +// private int port; +// +// @Value("${xxl.job.executor.logpath}") +// private String logPath; +// +// @Value("${xxl.job.executor.logretentiondays}") +// private int logRetentionDays; +// +// @Bean +// public XxlJobSpringExecutor xxlJobExecutor() { +// log.info(">>>>>>>>>>> xxl-job config init."); +// XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); +// xxlJobSpringExecutor.setAdminAddresses(adminAddresses); +// xxlJobSpringExecutor.setAppname(appname); +//// xxlJobSpringExecutor.setAddress(address); +// xxlJobSpringExecutor.setIp(ip); +// xxlJobSpringExecutor.setPort(port); +// xxlJobSpringExecutor.setAccessToken(accessToken); +// xxlJobSpringExecutor.setLogPath(logPath); +// xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); +// +// return xxlJobSpringExecutor; +// } +//} diff --git a/casic-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java index 798424c..3785003 100644 --- a/casic-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java +++ b/casic-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -1,37 +1,37 @@ -package com.casic.missiles.job.handler; - - -import com.xxl.job.core.biz.model.ReturnT; -import com.xxl.job.core.context.XxlJobHelper; -import com.xxl.job.core.handler.annotation.XxlJob; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; - -/** - * XxlJob开发示例(Bean模式) - * - * 开发步骤: - * 1、任务开发:在Spring Bean实例中,开发Job方法; - * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 - * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; - * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; - */ -@Slf4j -@Component -public class DemoJobHandler { - - @XxlJob(value = "demoHandler") - public ReturnT execute(String param) throws Exception { - System.out.println("调度任务Demo执行"); - XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); - -// for (int i = 0; i < 5; i++) { -// XxlJobLogger.log("beat at:" + i); -// TimeUnit.SECONDS.sleep(2); -// } - return SUCCESS; - } - -} +//package com.casic.missiles.job.handler; +// +// +//import com.xxl.job.core.biz.model.ReturnT; +//import com.xxl.job.core.context.XxlJobHelper; +//import com.xxl.job.core.handler.annotation.XxlJob; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.stereotype.Component; +// +//import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; +// +///** +// * XxlJob开发示例(Bean模式) +// * +// * 开发步骤: +// * 1、任务开发:在Spring Bean实例中,开发Job方法; +// * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 +// * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; +// * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; +// */ +//@Slf4j +//@Component +//public class DemoJobHandler { +// +// @XxlJob(value = "demoHandler") +// public ReturnT execute(String param) throws Exception { +// System.out.println("调度任务Demo执行"); +// XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); +// +//// for (int i = 0; i < 5; i++) { +//// XxlJobLogger.log("beat at:" + i); +//// TimeUnit.SECONDS.sleep(2); +//// } +// return SUCCESS; +// } +// +//} diff --git a/casic-job/src/main/java/com/casic/missiles/job/handler/OfflineJobHandler.java b/casic-job/src/main/java/com/casic/missiles/job/handler/OfflineJobHandler.java index 1e6708f..276c5db 100644 --- a/casic-job/src/main/java/com/casic/missiles/job/handler/OfflineJobHandler.java +++ b/casic-job/src/main/java/com/casic/missiles/job/handler/OfflineJobHandler.java @@ -1,26 +1,26 @@ -package com.casic.missiles.job.handler; - -import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; -import com.xxl.job.core.context.XxlJobHelper; -import com.xxl.job.core.handler.annotation.XxlJob; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -@RequiredArgsConstructor -public class OfflineJobHandler { - - private final IAlarmRecordsService iAlarmRecordsService; - - /** - * 离线判断处理 - */ - @XxlJob("offlineJobHandler") - public void offlineJobHandler() { - XxlJobHelper.log("check offline"); - iAlarmRecordsService.processOffline(); - } - -} +//package com.casic.missiles.job.handler; +// +//import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +//import com.xxl.job.core.context.XxlJobHelper; +//import com.xxl.job.core.handler.annotation.XxlJob; +//import lombok.RequiredArgsConstructor; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.stereotype.Component; +// +//@Slf4j +//@Component +//@RequiredArgsConstructor +//public class OfflineJobHandler { +// +// private final IAlarmRecordsService iAlarmRecordsService; +// +// /** +// * 离线判断处理 +// */ +// @XxlJob("offlineJobHandler") +// public void offlineJobHandler() { +// XxlJobHelper.log("check offline"); +// iAlarmRecordsService.processOffline(); +// } +// +//} diff --git a/casic-job/src/main/java/com/casic/missiles/job/handler/SuspendExpireJobHandler.java b/casic-job/src/main/java/com/casic/missiles/job/handler/SuspendExpireJobHandler.java index 5ce8fc2..3610add 100644 --- a/casic-job/src/main/java/com/casic/missiles/job/handler/SuspendExpireJobHandler.java +++ b/casic-job/src/main/java/com/casic/missiles/job/handler/SuspendExpireJobHandler.java @@ -1,65 +1,65 @@ -package com.casic.missiles.job.handler; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.casic.missiles.modular.alarm.entity.AlarmRecords; -import com.casic.missiles.modular.alarm.entity.SuspendLog; -import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; -import com.casic.missiles.modular.alarm.service.IApprovalLogService; -import com.casic.missiles.modular.alarm.service.ISuspendLogService; -import com.xxl.job.core.context.XxlJobHelper; -import com.xxl.job.core.handler.annotation.XxlJob; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.time.LocalDate; -import java.time.ZoneId; -import java.time.ZonedDateTime; -import java.util.Date; -import java.util.List; -import java.util.stream.Collectors; - -@Slf4j -@Component -@RequiredArgsConstructor -public class SuspendExpireJobHandler { - - private final ISuspendLogService iSuspendLogService; - private final IAlarmRecordsService iAlarmRecordsService; - private final IApprovalLogService iApprovalLogService; - - /** - * 挂起时间到期处理 - */ - @XxlJob("suspendExpireJobHandler") - public void suspendExpireJobHandler() { - XxlJobHelper.log("check suspend expire"); -// Date today = getTodayStart(); - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.lt("EXPIRE_TIME", new Date()); - queryWrapper.eq("VALID", "1"); - List suspendLogList = iSuspendLogService.list(queryWrapper); - if (suspendLogList != null && suspendLogList.size() > 0) { - suspendLogList.forEach(suspendLog -> { - suspendLog.setValid("0"); - }); - iSuspendLogService.updateBatchById(suspendLogList); - //更新最新状态 - List alarmIds = suspendLogList.stream().map(SuspendLog::getAlarmId).collect(Collectors.toList()); - List alarmRecordsList = iAlarmRecordsService.changeProcessStatus(alarmIds); - //添加流转日志 - iApprovalLogService.saveSuspendLogs(alarmRecordsList); - } - } - - private Date getTodayStart() { - // 获取当天日期 - LocalDate today = LocalDate.now(); - // 当天日期与午夜时间的组合 - ZonedDateTime todayStart = today.atStartOfDay(ZoneId.systemDefault()); - - // 转换为java.util.Date - return Date.from(todayStart.toInstant()); - } - -} +//package com.casic.missiles.job.handler; +// +//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +//import com.casic.missiles.modular.alarm.entity.AlarmRecords; +//import com.casic.missiles.modular.alarm.entity.SuspendLog; +//import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +//import com.casic.missiles.modular.alarm.service.IApprovalLogService; +//import com.casic.missiles.modular.alarm.service.ISuspendLogService; +//import com.xxl.job.core.context.XxlJobHelper; +//import com.xxl.job.core.handler.annotation.XxlJob; +//import lombok.RequiredArgsConstructor; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.stereotype.Component; +// +//import java.time.LocalDate; +//import java.time.ZoneId; +//import java.time.ZonedDateTime; +//import java.util.Date; +//import java.util.List; +//import java.util.stream.Collectors; +// +//@Slf4j +//@Component +//@RequiredArgsConstructor +//public class SuspendExpireJobHandler { +// +// private final ISuspendLogService iSuspendLogService; +// private final IAlarmRecordsService iAlarmRecordsService; +// private final IApprovalLogService iApprovalLogService; +// +// /** +// * 挂起时间到期处理 +// */ +// @XxlJob("suspendExpireJobHandler") +// public void suspendExpireJobHandler() { +// XxlJobHelper.log("check suspend expire"); +//// Date today = getTodayStart(); +// QueryWrapper queryWrapper = new QueryWrapper<>(); +// queryWrapper.lt("EXPIRE_TIME", new Date()); +// queryWrapper.eq("VALID", "1"); +// List suspendLogList = iSuspendLogService.list(queryWrapper); +// if (suspendLogList != null && suspendLogList.size() > 0) { +// suspendLogList.forEach(suspendLog -> { +// suspendLog.setValid("0"); +// }); +// iSuspendLogService.updateBatchById(suspendLogList); +// //更新最新状态 +// List alarmIds = suspendLogList.stream().map(SuspendLog::getAlarmId).collect(Collectors.toList()); +// List alarmRecordsList = iAlarmRecordsService.changeProcessStatus(alarmIds); +// //添加流转日志 +// iApprovalLogService.saveSuspendLogs(alarmRecordsList); +// } +// } +// +// private Date getTodayStart() { +// // 获取当天日期 +// LocalDate today = LocalDate.now(); +// // 当天日期与午夜时间的组合 +// ZonedDateTime todayStart = today.atStartOfDay(ZoneId.systemDefault()); +// +// // 转换为java.util.Date +// return Date.from(todayStart.toInstant()); +// } +// +//} diff --git a/casic-public/src/main/java/com/casic/missiles/enums/AlarmEnum.java b/casic-public/src/main/java/com/casic/missiles/enums/AlarmEnum.java new file mode 100644 index 0000000..e73e469 --- /dev/null +++ b/casic-public/src/main/java/com/casic/missiles/enums/AlarmEnum.java @@ -0,0 +1,46 @@ +package com.casic.missiles.enums; + + +public enum AlarmEnum { + + + Sloping("Sloping", "倾斜报警"), + Destroy("Destroy", "破坏报警"), + DiscL("DiscL", "左侧断线报警"), + Leak("Leak", "泄露报警"), + DiscR("DiscR", "右侧断线报警"), + VibL("VibL", "左侧振动报警"), + VibR("VibR", "右侧振动报警"); +// VibL("自管", "1"), +// VibL("自管", "1"), +// VibL("自管", "1"); + + private String code; + private String value; + + AlarmEnum(String code, String value) { + this.code = code; + this.value = value; + } + + + public static String getValue(String code){ + for(AlarmEnum approvalStatusEnum :values()){ + if(approvalStatusEnum.code.equals(code)){ + return approvalStatusEnum.value; + } + } + return ""; + } + + + + public String getCode() { + return code; + } + + public String getValue() { + return value; + } + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java new file mode 100644 index 0000000..fc881a1 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.data.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 外协管盯 前端控制器 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RestController +@RequestMapping("/system/dataGasOther") +public class DataGasOtherController { + +} + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java new file mode 100644 index 0000000..b5f3627 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.data.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 外协管盯 Mapper 接口 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Mapper +public interface DataGasOtherMapper extends BaseMapper { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml new file mode 100644 index 0000000..8ce1455 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID, DEVCODE, WELL_CODE, WELL_NUMBER, GASVAL, VBAT, BATSTA, SIN, RSRP, SINR, UPTIME, LOGTIME, SIG, TEMP, SS_STATE + + + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java new file mode 100644 index 0000000..53972ba --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java @@ -0,0 +1,94 @@ +package com.casic.missiles.modular.data.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 外协管盯 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Builder +@Data +@TableName("data_gas_other") +@ApiModel(value = "DataGasOther对象", description = "外协管盯") +public class DataGasOther implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId("ID") + private Long id; + + @ApiModelProperty("设备编号") + @TableField("DEVCODE") + private String devcode; + + @ApiModelProperty("点位编号") + @TableField("WELL_CODE") + private String wellCode; + + @ApiModelProperty("位号") + @TableField("WELL_NUMBER") + private String wellNumber; + + @ApiModelProperty("气体浓度采样值") + @TableField("GASVAL") + private String gasval; + + @ApiModelProperty("设备电池电压值(毫伏)") + @TableField("VBAT") + private String vbat; + + @ApiModelProperty("电池状态0 正常、 1 低电告警、2 关机") + @TableField("BATSTA") + private String batsta; + + @ApiModelProperty("接收信号强度等级") + @TableField("SIN") + private String sin; + + @ApiModelProperty("接收信号参考质量 服务小 区的 RSRP 值") + @TableField("RSRP") + private String rsrp; + + @ApiModelProperty("信噪比") + @TableField("SINR") + private String sinr; + + @ApiModelProperty("采集时间") + @TableField("UPTIME") + private Date uptime; + + @ApiModelProperty("上传时间") + @TableField("LOGTIME") + private Date logtime; + + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态,0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java index 86077b8..f4d4417 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java @@ -76,4 +76,17 @@ private Date logtime; + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态:0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java new file mode 100644 index 0000000..842ca0b --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.data.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.data.entity.DataGasOther; + +/** + *

+ * 外协管盯 服务类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +public interface IDataGasOtherService extends IService { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java new file mode 100644 index 0000000..4c660e9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java @@ -0,0 +1,226 @@ +package com.casic.missiles.modular.data.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.enums.DeviceTypeEnum; +import com.casic.missiles.enums.DictEnum; +import com.casic.missiles.modular.alarm.dto.AlarmDeviceRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.AlarmRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.BusAlarmLedgerDTO; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.data.dao.DataGasMapper; +import com.casic.missiles.modular.data.dao.DataGasOtherMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import com.casic.missiles.modular.data.entity.DataTubeOther; +import com.casic.missiles.modular.data.service.IDataAbstractService; +import com.casic.missiles.modular.data.service.IDataGasOtherService; +import com.casic.missiles.modular.data.service.ITrackLogService; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Optional; + +/** + *

+ * 外协管盯 服务实现类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RequiredArgsConstructor +@Service +public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { + + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + private final DataGasMapper dataGasMapper; + private final IAlarmRecordsService alarmRecordsService; + private final IAlarmRuleService alarmRuleService; + private final ITrackLogService iTrackLogService; + private final IBusDeviceService busDeviceService; + + @Override + public void process(String dataContent) { + + //解析数据+根据业务处理存储数据 + JSONObject json = JSONObject.parseObject(dataContent); + String devCode = json.get("devCode").toString(); + JSONObject jsonObject = json.getJSONObject("mBody"); + if (mType[0].equals(json.get("mType")) || mType[3].equals(json.get("mType"))) {//存储上报数据 + this.processNormalData(jsonObject, devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + this.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.TubeOther.name().equals(json.get("devType"))) { + if ("TubeOtherConfigSuccess".equals(jsonObject.get("bType"))) { +// deviceConfigManager.updateStatus(devCode); + } + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } else if (mType[4].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); +// imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; + try { + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); + } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + } + } + + @Transactional + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.getString("cell"); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = jsonObject.getJSONArray("datas"); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + String bfcf = busDeviceService.getBfcf(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).getString("gasval"); + String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); + String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); + String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataGasOther.builder() + .wellCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .wellNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .devcode(devCode) +// .cell(cell) + .gasval(gas) + .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime))) + .logtime(new Date()) + .vbat(vbat) + .batsta(batsta) + .rsrp(rsrp) + .sin(pci) + .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) + .build());//存储采集数据 + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) continue; + + //3.清除设备告警 + alarmRecordsService.cancelDeviceAlarm(devCode); + //4.存报警 + //若没绑定井,则不产生报警 + boolean alarmFlag = false; + if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { + //获取报警规则 + List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); + for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { + if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && + Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { + alarmFlag = true; + //写入报警 + //1、判断报警是否已存在 + if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.TubeOther.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); + //7.更新管线状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java index d248540..b33a1ee 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java @@ -91,7 +91,6 @@ } - public List getBusAlarmLedgerList(String devCode) { return this.dataGasMapper.getListByDevCode(devCode); } @@ -113,6 +112,13 @@ for (int i = 0; i < jsonArray.size(); i++) { try { String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) .findFirst(); @@ -175,18 +181,18 @@ alarmRecordsService.cancelDeviceAlarm(devCode); //4.存报警 //若没绑定井,则不产生报警 - boolean alarmFlag = false; + boolean alarmFlag = false; if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { //获取报警规则 List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { - alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); } break; } @@ -197,7 +203,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及设备状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新监测井状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java index e848fce..6297093 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java @@ -84,42 +84,78 @@ } - @Transactional - public void processAlarmData(JSONObject jsonObject, String devCode) { - JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + public void processEventAlarm(String devCode, String eventTypeCode, String logTime, String eventValue) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - //获取报警事件 - List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - - List busWellDTOList = dataGasMapper.getListByDevCode(devCode); - //若没绑定井,则不产生报警 - if (busWellDTOList != null && busWellDTOList.size() > 0) { - - for (int i = 0; i < jsonArray.size(); i++) { + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + //特殊处理消警 + if ("0".equals(eventValue)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, eventTypeCode); + } + return; } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> eventTypeCode.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 - if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + if (!alarmDeviceRuleResponseDTO.isPresent()) return; //1.查询是否已存在该类报警 - if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) return; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); - - + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + } + } + } + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + try { + String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmEventCode)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } } } } @@ -169,7 +205,76 @@ .rightVibrateAlarm(VibR) .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(uptime))) .logtime(new Date()) - .build());//存储采集数据 + .build()); + + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + ruleResponseDTOList.forEach(ruleResponseDTO -> { + + if ("Sloping".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Sloping)&&(!alarmRecordsService.isWatchAlarms(devCode,"Sloping"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Sloping", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Sloping)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Sloping"); + + } + } + if ("Destroy".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Destroy)&&(!alarmRecordsService.isWatchAlarms(devCode,"Destroy"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Destroy", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Destroy)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Destroy"); + + } + } + if ("Leak".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Leak)&&(!alarmRecordsService.isWatchAlarms(devCode,"Leak"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Leak", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Leak)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Leak"); + + } + } + if ("DiscL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscL)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscL"); + + } + } + if ("DiscR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscR)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscR"); + } + } + + if ("VibL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibL)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibL"); + } + } + if ("VibR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibR)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibR"); + } + } + }); + +// //处理报警事件 +// processEventAlarm(devCode,"Sloping",uptime,Sloping); +// processEventAlarm(devCode,"Destroy",uptime,Destroy); +// processEventAlarm(devCode,"Leak",uptime,Leak); +// processEventAlarm(devCode,"DiscL",uptime,DiscL); +// processEventAlarm(devCode,"DiscR",uptime,DiscR); +// processEventAlarm(devCode,"VibL",uptime,VibL); +// processEventAlarm(devCode,"VibR",uptime,VibR); + //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -197,7 +302,7 @@ if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && gas >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), gas)) { @@ -213,7 +318,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R,alarmFlag?"燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R, alarmFlag ? "燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java index f913775..895d201 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java @@ -89,6 +89,7 @@ String bfcf = busDeviceService.getBfcf(devCode); if (DictEnum.BF_ON.equals(bfcf)) { JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); //获取报警事件 List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); List busWellDTOList = dataGasMapper.getListByDevCode(devCode); @@ -96,25 +97,43 @@ if (busWellDTOList != null && busWellDTOList.size() > 0) { for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 if (!alarmDeviceRuleResponseDTO.isPresent()) continue; //1.查询是否已存在该类报警 if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { @@ -141,6 +160,9 @@ String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); gas = String.format("%.2f", Double.valueOf(gas)); //1.存数据 save(DataTubeOther.builder() @@ -156,6 +178,9 @@ .rsrp(rsrp) .sin(pci) .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) .build());//存储采集数据 //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -186,7 +211,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 98e736b..2288075 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -216,5 +216,15 @@ public ReturnDTO syncDeviceStatus() { return ReturnUtil.success(iBusDeviceService.syncDeviceStatus()); } + + @ApiOperation("根据闸井id获取设备信息") + @PostMapping("/getListByWellId") + @ResponseBody + public ReturnDTO getListByWellId(@RequestBody IdDTO idDTO) { + Assert.isFalse(ObjectUtil.isEmpty(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iBusDeviceService.getListByWellId(idDTO.getId())); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java index 72a2d84..d6d9743 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java @@ -85,6 +85,7 @@ return ReturnUtil.success(iBusLedgerService.detail(idDTO.getId())); } + /** * 同步三级部门 * diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java index 9e412d2..4316b56 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java @@ -1,22 +1,33 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.response.ErrorResponseData; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; +import com.casic.missiles.modular.device.dto.BusPositionImportDTO; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.ReturnUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataAccessException; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; /** @@ -40,8 +51,44 @@ @PostMapping("/addPosition") @ResponseBody public ReturnDTO addPosition(@RequestBody BusLedgerPipe busLedgerPipe) { + + List busLedgerPipeList = iBusLedgerPipeService.getListByNumber(busLedgerPipe.getTagNumber()); + if(busLedgerPipeList!=null&&busLedgerPipeList.size()>0){ + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE,"安装位号已存!!!"); + } + Long id =IdUtil.getSnowflake(1,2).nextId(); + busLedgerPipe.setId(id); iBusLedgerPipeService.save(busLedgerPipe); - return ReturnUtil.success(busLedgerPipe.getId()); + return ReturnUtil.success(id); + } + + @ApiOperation("批量导入") + @RequestMapping(value = "/batchImport", method = RequestMethod.POST) + @ResponseBody + public Object batchImport(@RequestParam("file") MultipartFile file) { + List results = new ArrayList<>(); + try { + results = this.importExcel(BusPositionImportDTO.class, file, null, null); + List list = iBusLedgerPipeService.addPositionBatch(results); + if (!CollectionUtil.isEmpty(list)) { + //获取校验报错信息 + return new ErrorResponseData(list.get(0)); + } + } catch (Exception e) { + return catchMybatisPlusException(e, "导入位置信息失败"); + } + return ResponseData.success(); + } + + private ResponseData catchMybatisPlusException(Exception e, String errorMsg) { + if (e instanceof DataAccessException) { + DataAccessException mybatisPlusException = (DataAccessException) e; + String message = mybatisPlusException.getRootCause().getMessage(); + if (message.contains("Duplicate entry '")) { + return new ErrorResponseData("安装位号重复:" + message.replaceAll("Duplicate entry '", "").replaceAll("' for key 'DEVCODE'", "")); + } + } + return new ErrorResponseData(errorMsg); } @ApiOperation("编辑点位") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java index d1e08a8..d938876 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java @@ -51,6 +51,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getOperatorName()), "CREATE_USER", request.getOperatorName()); queryWrapper.ge(ObjectUtil.isNotEmpty(request.getStartTime()), "START_TIME", request.getStartTime()); queryWrapper.le(ObjectUtil.isNotEmpty(request.getEndTime()), "END_TIME", request.getEndTime()); + queryWrapper.orderByDesc("START_TIME"); return ReturnUtil.success(super.packForBT(iSyncLogService.page(page, queryWrapper))); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java index 5ee5291..23ddee9 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java @@ -73,4 +73,12 @@ " where bd.DEVCODE= #{devcode} and bd.VALID=1 " + ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD asc") List getDeviceTypeRule(@Param("devcode") String devcode); + + + @Select("SELECT bd.* from bus_device bd " + + "left JOIN bus_device_ledger bl on bd.id= bl.DEVICE_ID and bl.VALID=1 " + + "LEFT JOIN bus_ledger_all_view bv on bv.id= bl.LEDGER_ID and bv.type= bl.TYPE and bv.VALID=1 " + + "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") + List getListByWellId(@Param("wellId") Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java index e1d16c4..a4c3f7a 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java @@ -37,7 +37,7 @@ @Select("SELECT b.ORG_ID,b.ORG_CODE,b.ORG_NAME,b.PARENT_ID FROM `bus_sync_org_relation` b WHERE b.DEL_FLAG =0 and b.PARENT_ID = #{syncId} ") List synDept(@Param("syncId") String syncId); - @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view ") + @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view where VALID=1") List getBusLedgers(); @Select("SELECT DEVCODE FROM `bus_device` where VALID>0 ") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml index 99ef10b..c6d1fff 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml @@ -29,6 +29,7 @@ bp.DEVICE_MODEL as deviceModel, bt.TYPE_NAME as typeName, + bp.DATA_SERVICE as deviceCategory, bm.`NAME` as manufactureName, bl.tagNumber as tagNumber, bl.id as ledgerId, @@ -81,6 +82,10 @@ and bd.LOGTIME #{request.logTime2} + + and bp.DATA_SERVICE =#{request.deviceCategory} + + ORDER BY bd.INSTALL_DATE DESC diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml index bdadb6a..d3f4684 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml @@ -40,7 +40,7 @@ `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + AND bdl.VALID = 1 JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -99,8 +99,8 @@ bm.`NAME` as manufactureName FROM `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE - LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID and bdl.type=blp.type + AND bdl.VALID = 1 LEFT JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -117,7 +117,9 @@ WITH station_temp as(SELECT bl.ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID FROM `bus_ledger` bl where bl.VALID=1 and bl.TYPE =2) - select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME from station_temp bl + select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME,bd.DEVCODE from station_temp bl left join bus_device_ledger bdl on bdl.LEDGER_ID = bl.ID and bdl.TYPE =2 and bdl.valid=1 left join bus_device bd on bd.id= bdl.DEVICE_ID and bd.VALID=1 order by bl.ID diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml index 7b92b04..1d97c64 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml @@ -184,7 +184,7 @@ WHERE EQ_LOCNO like 'N%' and - EQ_CATEGORY in (1,3) + EQ_CATEGORY in (1,2,3,5) diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java index 859cf08..143b42d 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java @@ -23,6 +23,9 @@ @ApiModelProperty("设备类型id") private Long typeId; + @ApiModelProperty("产品名称") + private String productName; + @ApiModelProperty("指令集合") private List commandConfigList; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java index 646610b..2cb5894 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("最新上传结束时间") private String logTime2; + + @ApiModelProperty("设备类别(0:自有设备,1:数据服务)") + private String deviceCategory; } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java index 8c95537..28b30fa 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java @@ -44,6 +44,9 @@ @ExcelProperty("关联管线") private String pipeCode; + @ExcelProperty("监测类型") + private String monitorType; + private String watchObject; private Long deviceType; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java index 0980c34..ac5daf0 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java @@ -24,4 +24,7 @@ @ApiModelProperty("详细位置") private String position; + @ApiModelProperty("1:其他,3:管线") + private String type; + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java new file mode 100644 index 0000000..bce7ebd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.device.dto; + + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class BusPositionImportDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + + @ExcelProperty("管线编号") + private String pipeCode; + + @ExcelProperty("安装位号") + private String tagNumber; + + @ExcelProperty("经度(高德)") + private String lngGaode; + + @ExcelProperty("纬度(高德)") + private String latGaode; + + @ExcelProperty("详细位置") + private String position; + + @ExcelProperty("管理单位") + private Long deptid; + + @ExcelProperty("位置类别") + private String type; + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java index 58faa0e..d72ae78 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java @@ -16,13 +16,13 @@ private String deviceId; //移动命令:left right up down left_up left_down right_up right_down GOTO_PRESET - @ApiModelProperty("移动命令") + @ApiModelProperty("移动命令(left right up down left_up left_down right_up right_down)") private String command; - @ApiModelProperty("速度") + @ApiModelProperty("速度,一般传100") private String speed; - @ApiModelProperty("启停命令") + @ApiModelProperty("启停命令(0:开始,1:结束)") private String cameraAction; @ApiModelProperty("预置点编号") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java index b4ec73c..5a3d0b0 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java @@ -66,7 +66,7 @@ private String powerSupplyMode; - @ApiModelProperty("是否结束数据服务") + @ApiModelProperty("是否结束数据服务(1:是,0:否)") @TableField("DATA_SERVICE") private String dataService; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java index 1184995..407e3c1 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java @@ -193,10 +193,14 @@ @TableField(exist = false) private String bfztName; + @ApiModelProperty("设备类别(0:自有设备,1:数据服务)") + @TableField(exist = false) + private String deviceCategory; + public BusDevice() { } - public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds) { + public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds, String monitorType) { this.devcode = devcode; this.deviceType = deviceType; this.productId = productId; @@ -204,6 +208,7 @@ this.installDate = installDate; this.watchObject = watchObject; this.ledgerIds = ledgerIds; + this.monitorType = monitorType; } public static List convertDeviceList(List dtoList) { @@ -227,7 +232,8 @@ deviceImportDTO.getValid(), deviceImportDTO.getInstallDate(), deviceImportDTO.getWatchObject(), - deviceImportDTO.getLedgerIds())); + deviceImportDTO.getLedgerIds(), + deviceImportDTO.getMonitorType())); }); return busDeviceList; } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java index 12b52de..1ac8455 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java @@ -1,16 +1,20 @@ package com.casic.missiles.modular.device.entity; +import cn.hutool.core.util.IdUtil; 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 com.casic.missiles.modular.device.dto.BusPositionImportDTO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import java.io.Serializable; +import java.util.ArrayList; import java.util.Date; +import java.util.List; /** *

@@ -29,7 +33,7 @@ private static final long serialVersionUID = 1L; @ApiModelProperty("主键") - @TableId(value = "ID", type = IdType.AUTO) +// @TableId(value = "ID", type = IdType.AUTO) private Long id; @ApiModelProperty("编号") @@ -60,6 +64,10 @@ @TableField("DEPTID") private Long deptid; + @ApiModelProperty("类别(1:其他,3:管线)") + @TableField("`TYPE`") + private String type; + @ApiModelProperty("责任部门") @TableField("RESPONSIBLE_DEPT") private Long responsibleDept; @@ -110,9 +118,10 @@ public BusLedgerPipe() { } - public BusLedgerPipe(String pipeCode, String ledgerName, String tagNumber, + public BusLedgerPipe(Long id,String pipeCode, String ledgerName, String tagNumber, String lngGaode, String latGaode, String position, - Long deptid, String devcode) { + Long deptid, String devcode, String type) { + this.id=id; this.pipeCode = pipeCode; this.ledgerName = ledgerName; this.tagNumber = tagNumber; @@ -121,5 +130,26 @@ this.position = position; this.deptid = deptid; this.devcode = devcode; + this.type = type; } + + public static List convertDeviceList(List dtoList) { + + + List busDeviceList = new ArrayList<>(); + dtoList.forEach(positionImportDTO -> { + + busDeviceList.add(new BusLedgerPipe(IdUtil.getSnowflake(1,2).nextId(),positionImportDTO.getPipeCode(), + positionImportDTO.getTagNumber(), + positionImportDTO.getTagNumber(), + positionImportDTO.getLngGaode(), + positionImportDTO.getLatGaode(), + positionImportDTO.getPosition(), + positionImportDTO.getDeptid(), + "", + positionImportDTO.getType())); + }); + return busDeviceList; + } + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java index aaaa409..63c0576 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java @@ -52,4 +52,8 @@ List getDeviceRule(String devcode); + List getDevicesByCodes(List devcodes); + + List getListByWellId(Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java index 14f6a93..8692383 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java @@ -2,11 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; -import com.casic.missiles.core.datascope.DataScope; -import com.casic.missiles.modular.device.dto.BusLedgerPipeMonitorRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeResponseDTO; -import com.casic.missiles.modular.device.dto.MonitorDataRequestDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import java.util.List; @@ -26,17 +22,21 @@ Page monitorPipePageList(Page page, BusLedgerPipeMonitorRequestDTO request); - BusLedgerPipeResponseDTO detail(Long id,String devcode); + BusLedgerPipeResponseDTO detail(Long id, String devcode); - List> watchDataByPipe(MonitorDataRequestDTO requestDTO); + List> watchDataByPipe(MonitorDataRequestDTO requestDTO); - List> pipeList(); + List> pipeList(); - List> deviceList(); + List> deviceList(); BusLedgerPipe saveBusLedgerPipe(BusLedgerPipe busLedgerPipe); Boolean updateMonitorStatus(List tagNumbers); + List addPositionBatch(List results); + + List getListByNumber(String tagNumber); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java index 66ed812..ad72230 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java @@ -12,9 +12,12 @@ import com.casic.missiles.modular.device.dto.BusConfigOtherDTO; import com.casic.missiles.modular.device.dto.BusConfigRequestDTO; import com.casic.missiles.modular.device.entity.BusConfig; +import com.casic.missiles.modular.device.entity.BusDevice; import com.casic.missiles.modular.device.service.IBusConfigService; +import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.HttpClientUtils; import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -22,6 +25,9 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.LinkedBlockingDeque; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; /** *

@@ -36,6 +42,11 @@ public class BusConfigServiceImpl extends ServiceImpl implements IBusConfigService { private final AbstractPermissionContext abstractPermissionContext; + private final IBusDeviceService iBusDeviceService; + private final ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(3, 6, 60, TimeUnit.SECONDS, new LinkedBlockingDeque<>(10)); + + @Value("${casic.brSendConfigUrl}") + private String brSendConfigUrl; @Transactional @Override @@ -105,6 +116,42 @@ .operator(user != null ? user.getId() : null) .operatorName(user != null ? user.getName() : "").build()); }); + + + threadPoolExecutor.execute( + () -> { + //发送第三方下发: + if (busConfigOtherDTO.getProductName().contains("管网哨兵")) { + List busDeviceList = iBusDeviceService.getDevicesByCodes(devcodes); + for (BusDevice busDevice : busDeviceList) { + if (ObjectUtil.isAllNotEmpty(busDevice.getNbProductId(), busDevice.getNbDeviceId())) { + Map commandMap = new HashMap<>(); + commandMap.put("productId", busDevice.getNbProductId()); + commandMap.put("devCode", busDevice.getDevcode()); + commandMap.put("deviceId", busDevice.getNbDeviceId()); + commandMap.put("cmdList", busConfigOtherDTO.getCommandConfigList()); + HttpClientUtils.post(brSendConfigUrl+"/tube/config/send", JSON.toJSONString(commandMap)); + } + } + } else if (busConfigOtherDTO.getProductName().contains("智能警示桩")) { + + List busDeviceList = iBusDeviceService.getDevicesByCodes(devcodes); + for (BusDevice busDevice : busDeviceList) { + if (ObjectUtil.isAllNotEmpty(busDevice.getNbProductId(), busDevice.getNbDeviceId())) { + Map commandMap = new HashMap<>(); + commandMap.put("productId", busDevice.getNbProductId()); + commandMap.put("devCode", busDevice.getDevcode()); + commandMap.put("deviceId", busDevice.getNbDeviceId()); + commandMap.put("cmdList", busConfigOtherDTO.getCommandConfigList()); + HttpClientUtils.post(brSendConfigUrl+"/sentinel/config/send", JSON.toJSONString(commandMap)); + } + } + + } + } + ); + + return this.saveBatch(busConfigs); // List> mapList = new ArrayList<>(); // Map commandMap = new HashMap<>(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java index 60d15e5..bae6902 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java @@ -3,6 +3,7 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -80,6 +81,7 @@ @Override public Page listPage(Page page, BusDeviceDTO request) { + page.setOptimizeCountSql(false); Page busDevicePage = this.baseMapper.pageList(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List busDeviceList = busDevicePage.getRecords(); busDeviceList.forEach(busDevice -> { @@ -227,7 +229,7 @@ if (deviceDataEnum.getTableColumns().contains("cell")) { String[] queryColumns = deviceDataEnum.getQueryColumns().split(",", 4); resultMap = this.baseMapper.cellAnalysis(deviceDataEnum.getTableName(), - "cell,uptime", + deviceDataEnum.getCellColumn(), queryColumns[0], queryColumns[1], deviceDataEnum.getOrderColumn(), @@ -265,14 +267,13 @@ } else { List busDeviceLedgers = busDeviceLedgerService.getListByDeviceId(busDevice.getId()); //没绑定关系,先绑定 - if (ObjectUtil.isNotEmpty(busDeviceLedgers)) { + if (busDeviceLedgers == null || busDeviceLedgers.size() < 1) { busDeviceLedgerService.saveDeviceLedger(busDevice.getId(), busDevice.getLedgerIds(), busDevice.getWatchObject()); } else { //已绑定,判断是否位置变了 List ledgerIdsPre = busDeviceLedgers.stream().map(BusDeviceLedger::getLedgerId).collect(Collectors.toList()); if (ledgerIds.containsAll(ledgerIdsPre) && ledgerIdsPre.containsAll(ledgerIds)) { } else { - busDeviceLedgerService.deleteDeviceLedgers(Arrays.asList(busDevice.getId())); busDeviceLedgerService.saveDeviceLedger(busDevice.getId(), busDevice.getLedgerIds(), busDevice.getWatchObject()); } } @@ -304,6 +305,8 @@ List codeList = iBusLedgerService.getCodeLists(); //获取管线编号 List pipeCodeList = iBusLedgerService.getPipeCodeList(); + List pipeList = new ArrayList<>(); + final Integer[] index = {1}; results.forEach(deviceImportDTO -> { index[0]++; @@ -357,22 +360,16 @@ return; } //新增点位 - if ("3".equals(deviceImportDTO.getWatchObject())) { + if ("3".equals(deviceImportDTO.getWatchObject()) || "1".equals(deviceImportDTO.getWatchObject())) { //toDo:安装位号一致,入一次即可 //为管线 - BusLedgerPipe busLedgerPipe = new BusLedgerPipe(deviceImportDTO.getPipeCode(), deviceImportDTO.getTagNumber(), + Long pipeLedgerId = IdUtil.getSnowflake(1, 2).nextId(); + BusLedgerPipe busLedgerPipe = new BusLedgerPipe(pipeLedgerId, deviceImportDTO.getPipeCode(), deviceImportDTO.getTagNumber(), deviceImportDTO.getTagNumber(), deviceImportDTO.getLng(), deviceImportDTO.getLat(), - deviceImportDTO.getPosition(), deviceImportDTO.getDeptid(), deviceImportDTO.getDevCode()); - busLedgerPipe = iBusLedgerPipeService.saveBusLedgerPipe(busLedgerPipe); - deviceImportDTO.setLedgerIds(Arrays.asList(busLedgerPipe.getId())); - }else if("1".equals(deviceImportDTO.getWatchObject())){ - //新增闸井 - BusLedger busLedger = new BusLedger(deviceImportDTO.getTagNumber(), - deviceImportDTO.getTagNumber(),deviceImportDTO.getTagNumber(), - deviceImportDTO.getLng(),deviceImportDTO.getLat(),deviceImportDTO.getPosition(), - deviceImportDTO.getDeptid()); - this.iBusLedgerService.save(busLedger); - deviceImportDTO.setLedgerIds(Arrays.asList(busLedger.getId())); + deviceImportDTO.getPosition(), deviceImportDTO.getDeptid(), deviceImportDTO.getDevCode(), deviceImportDTO.getWatchObject()); +// busLedgerPipe = iBusLedgerPipeService.saveBusLedgerPipe(busLedgerPipe); + pipeList.add(busLedgerPipe); + deviceImportDTO.setLedgerIds(Arrays.asList(pipeLedgerId)); } } @@ -383,6 +380,10 @@ return list; } + if (pipeList != null && pipeList.size() > 0) { + iBusLedgerPipeService.saveBatch(pipeList); + } + List busDeviceList = BusDevice.convertDeviceList(results); //保存设备信息 @@ -514,7 +515,7 @@ } -// @Cacheable(value = "alarmRuleCache", key = "#devcode") + // @Cacheable(value = "alarmRuleCache", key = "#devcode") @Override public List getDeviceRule(String devcode) { List alarmRuleValueList = this.baseMapper.getSpecialDeviceRule(devcode); @@ -523,4 +524,18 @@ } return alarmRuleValueList; } + + + @Override + public List getDevicesByCodes(List devcodes) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("DEVCODE", devcodes); + queryWrapper.eq("VALID", "1"); + return this.baseMapper.selectList(queryWrapper); + } + + @Override + public List getListByWellId(Long wellId) { + return this.baseMapper.getListByWellId(wellId); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java index 5073159..7f8bfdc 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service.impl; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -12,11 +13,8 @@ import com.casic.missiles.enums.DeviceDataEnum; import com.casic.missiles.modular.device.dao.BusDeviceMapper; import com.casic.missiles.modular.device.dao.BusLedgerPipeMapper; -import com.casic.missiles.modular.device.dto.BusLedgerPipeMonitorRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeResponseDTO; -import com.casic.missiles.modular.device.dto.MonitorDataRequestDTO; -import com.casic.missiles.modular.device.entity.BusLedgerPipe; +import com.casic.missiles.modular.device.dto.*; +import com.casic.missiles.modular.device.entity.*; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.server.CommonServer; @@ -24,11 +22,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.stream.Collectors; /** *

@@ -63,6 +60,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getPipeCode()), "PIPE_CODE", request.getPipeCode()); queryWrapper.like(ObjectUtil.isNotEmpty(request.getPosition()), "POSITION", request.getPosition()); queryWrapper.in(ObjectUtil.isNotEmpty(deptIds), "DEPTID", deptIds); + queryWrapper.eq(ObjectUtil.isNotEmpty(request.getType()), "TYPE", request.getType()); Page pipePage = this.page(page, queryWrapper); List pipeList = pipePage.getRecords(); pipeList.forEach(pipe -> { @@ -156,6 +154,12 @@ return busLedgerPipe; } + public List getList() { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("VALID", "1"); + return this.baseMapper.selectList(queryWrapper); + } + @Override public Boolean updateMonitorStatus(List tagNumbers) { UpdateWrapper updateWrapper = new UpdateWrapper<>(); @@ -163,4 +167,43 @@ updateWrapper.set("MONITOR_STATE", "3"); return this.update(updateWrapper); } + + @Transactional + @Override + public List addPositionBatch(List results) { + List list = new ArrayList<>(); + if (!CollectionUtil.isEmpty(results)) { + List busLedgerPipeList = this.getList(); + List tagCodes = busLedgerPipeList.stream().map(BusLedgerPipe::getTagNumber).collect(Collectors.toList()); + final Integer[] index = {1}; + results.forEach(busPositionImportDTO -> { + index[0]++; + //设备编号查重 + if (tagCodes.contains(busPositionImportDTO.getTagNumber())) { + list.add("第" + index[0] + "行,安装位号已存在!"); + return; + } + + }); + if (CollectionUtil.isNotEmpty(list)) { + return list; + } + List busDeviceList = BusLedgerPipe.convertDeviceList(results); + + //保存点位信息 + this.saveBatch(busDeviceList); + + } else { + list.add("导入数据不能为空"); + } + return list; + } + + @Override + public List getListByNumber(String tagNumber) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("VALID", "1"); + queryWrapper.eq("TAG_NUMBER", tagNumber); + return this.baseMapper.selectList(queryWrapper); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java index 5798675..ec2b3f5 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.modular.device.dao.SyncLogMapper; import com.casic.missiles.modular.device.entity.SyncLog; import com.casic.missiles.modular.device.service.ISyncLogDetailService; @@ -39,7 +40,8 @@ syncLog.setUpdateCount(updateCount); syncLog.setAddCount(addCount); syncLog.setDeleteCount(deleteCount); - syncLog.setCreateUser(permissionContext.getAuthService().getLoginUser().getName()); + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + syncLog.setCreateUser(null == authUser ? "admin" : authUser.getName()); return this.baseMapper.insert(syncLog) > 0 ? true : false; } diff --git a/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java index b80c202..6be2b47 100644 --- a/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java +++ b/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -1,56 +1,56 @@ -package com.casic.missiles.job.config; - -import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - - -@Slf4j -@Configuration -@Data -@ConditionalOnExpression("T(org.apache.commons.lang3.StringUtils).isNotEmpty('${xxl.job.admin.addresses}')") -public class XxlJobConfig { - @Value("${xxl.job.admin.addresses}") - private String adminAddresses; - - @Value("${xxl.job.accessToken}") - private String accessToken; - - @Value("${xxl.job.executor.appname}") - private String appname; - -// @Value("${xxl.job.executor.address}") -// private String address; - - @Value("${xxl.job.executor.ip}") - private String ip; - - @Value("${xxl.job.executor.port}") - private int port; - - @Value("${xxl.job.executor.logpath}") - private String logPath; - - @Value("${xxl.job.executor.logretentiondays}") - private int logRetentionDays; - - @Bean - public XxlJobSpringExecutor xxlJobExecutor() { - log.info(">>>>>>>>>>> xxl-job config init."); - XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); - xxlJobSpringExecutor.setAdminAddresses(adminAddresses); - xxlJobSpringExecutor.setAppname(appname); -// xxlJobSpringExecutor.setAddress(address); - xxlJobSpringExecutor.setIp(ip); - xxlJobSpringExecutor.setPort(port); - xxlJobSpringExecutor.setAccessToken(accessToken); - xxlJobSpringExecutor.setLogPath(logPath); - xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); - - return xxlJobSpringExecutor; - } -} +//package com.casic.missiles.job.config; +// +//import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +//import lombok.Data; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.beans.factory.annotation.Value; +//import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; +//import org.springframework.context.annotation.Bean; +//import org.springframework.context.annotation.Configuration; +// +// +//@Slf4j +//@Configuration +//@Data +//@ConditionalOnExpression("T(org.apache.commons.lang3.StringUtils).isNotEmpty('${xxl.job.admin.addresses}')") +//public class XxlJobConfig { +// @Value("${xxl.job.admin.addresses}") +// private String adminAddresses; +// +// @Value("${xxl.job.accessToken}") +// private String accessToken; +// +// @Value("${xxl.job.executor.appname}") +// private String appname; +// +//// @Value("${xxl.job.executor.address}") +//// private String address; +// +// @Value("${xxl.job.executor.ip}") +// private String ip; +// +// @Value("${xxl.job.executor.port}") +// private int port; +// +// @Value("${xxl.job.executor.logpath}") +// private String logPath; +// +// @Value("${xxl.job.executor.logretentiondays}") +// private int logRetentionDays; +// +// @Bean +// public XxlJobSpringExecutor xxlJobExecutor() { +// log.info(">>>>>>>>>>> xxl-job config init."); +// XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); +// xxlJobSpringExecutor.setAdminAddresses(adminAddresses); +// xxlJobSpringExecutor.setAppname(appname); +//// xxlJobSpringExecutor.setAddress(address); +// xxlJobSpringExecutor.setIp(ip); +// xxlJobSpringExecutor.setPort(port); +// xxlJobSpringExecutor.setAccessToken(accessToken); +// xxlJobSpringExecutor.setLogPath(logPath); +// xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); +// +// return xxlJobSpringExecutor; +// } +//} diff --git a/casic-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java index 798424c..3785003 100644 --- a/casic-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java +++ b/casic-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -1,37 +1,37 @@ -package com.casic.missiles.job.handler; - - -import com.xxl.job.core.biz.model.ReturnT; -import com.xxl.job.core.context.XxlJobHelper; -import com.xxl.job.core.handler.annotation.XxlJob; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; - -/** - * XxlJob开发示例(Bean模式) - * - * 开发步骤: - * 1、任务开发:在Spring Bean实例中,开发Job方法; - * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 - * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; - * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; - */ -@Slf4j -@Component -public class DemoJobHandler { - - @XxlJob(value = "demoHandler") - public ReturnT execute(String param) throws Exception { - System.out.println("调度任务Demo执行"); - XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); - -// for (int i = 0; i < 5; i++) { -// XxlJobLogger.log("beat at:" + i); -// TimeUnit.SECONDS.sleep(2); -// } - return SUCCESS; - } - -} +//package com.casic.missiles.job.handler; +// +// +//import com.xxl.job.core.biz.model.ReturnT; +//import com.xxl.job.core.context.XxlJobHelper; +//import com.xxl.job.core.handler.annotation.XxlJob; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.stereotype.Component; +// +//import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; +// +///** +// * XxlJob开发示例(Bean模式) +// * +// * 开发步骤: +// * 1、任务开发:在Spring Bean实例中,开发Job方法; +// * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 +// * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; +// * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; +// */ +//@Slf4j +//@Component +//public class DemoJobHandler { +// +// @XxlJob(value = "demoHandler") +// public ReturnT execute(String param) throws Exception { +// System.out.println("调度任务Demo执行"); +// XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); +// +//// for (int i = 0; i < 5; i++) { +//// XxlJobLogger.log("beat at:" + i); +//// TimeUnit.SECONDS.sleep(2); +//// } +// return SUCCESS; +// } +// +//} diff --git a/casic-job/src/main/java/com/casic/missiles/job/handler/OfflineJobHandler.java b/casic-job/src/main/java/com/casic/missiles/job/handler/OfflineJobHandler.java index 1e6708f..276c5db 100644 --- a/casic-job/src/main/java/com/casic/missiles/job/handler/OfflineJobHandler.java +++ b/casic-job/src/main/java/com/casic/missiles/job/handler/OfflineJobHandler.java @@ -1,26 +1,26 @@ -package com.casic.missiles.job.handler; - -import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; -import com.xxl.job.core.context.XxlJobHelper; -import com.xxl.job.core.handler.annotation.XxlJob; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -@RequiredArgsConstructor -public class OfflineJobHandler { - - private final IAlarmRecordsService iAlarmRecordsService; - - /** - * 离线判断处理 - */ - @XxlJob("offlineJobHandler") - public void offlineJobHandler() { - XxlJobHelper.log("check offline"); - iAlarmRecordsService.processOffline(); - } - -} +//package com.casic.missiles.job.handler; +// +//import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +//import com.xxl.job.core.context.XxlJobHelper; +//import com.xxl.job.core.handler.annotation.XxlJob; +//import lombok.RequiredArgsConstructor; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.stereotype.Component; +// +//@Slf4j +//@Component +//@RequiredArgsConstructor +//public class OfflineJobHandler { +// +// private final IAlarmRecordsService iAlarmRecordsService; +// +// /** +// * 离线判断处理 +// */ +// @XxlJob("offlineJobHandler") +// public void offlineJobHandler() { +// XxlJobHelper.log("check offline"); +// iAlarmRecordsService.processOffline(); +// } +// +//} diff --git a/casic-job/src/main/java/com/casic/missiles/job/handler/SuspendExpireJobHandler.java b/casic-job/src/main/java/com/casic/missiles/job/handler/SuspendExpireJobHandler.java index 5ce8fc2..3610add 100644 --- a/casic-job/src/main/java/com/casic/missiles/job/handler/SuspendExpireJobHandler.java +++ b/casic-job/src/main/java/com/casic/missiles/job/handler/SuspendExpireJobHandler.java @@ -1,65 +1,65 @@ -package com.casic.missiles.job.handler; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.casic.missiles.modular.alarm.entity.AlarmRecords; -import com.casic.missiles.modular.alarm.entity.SuspendLog; -import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; -import com.casic.missiles.modular.alarm.service.IApprovalLogService; -import com.casic.missiles.modular.alarm.service.ISuspendLogService; -import com.xxl.job.core.context.XxlJobHelper; -import com.xxl.job.core.handler.annotation.XxlJob; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.time.LocalDate; -import java.time.ZoneId; -import java.time.ZonedDateTime; -import java.util.Date; -import java.util.List; -import java.util.stream.Collectors; - -@Slf4j -@Component -@RequiredArgsConstructor -public class SuspendExpireJobHandler { - - private final ISuspendLogService iSuspendLogService; - private final IAlarmRecordsService iAlarmRecordsService; - private final IApprovalLogService iApprovalLogService; - - /** - * 挂起时间到期处理 - */ - @XxlJob("suspendExpireJobHandler") - public void suspendExpireJobHandler() { - XxlJobHelper.log("check suspend expire"); -// Date today = getTodayStart(); - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.lt("EXPIRE_TIME", new Date()); - queryWrapper.eq("VALID", "1"); - List suspendLogList = iSuspendLogService.list(queryWrapper); - if (suspendLogList != null && suspendLogList.size() > 0) { - suspendLogList.forEach(suspendLog -> { - suspendLog.setValid("0"); - }); - iSuspendLogService.updateBatchById(suspendLogList); - //更新最新状态 - List alarmIds = suspendLogList.stream().map(SuspendLog::getAlarmId).collect(Collectors.toList()); - List alarmRecordsList = iAlarmRecordsService.changeProcessStatus(alarmIds); - //添加流转日志 - iApprovalLogService.saveSuspendLogs(alarmRecordsList); - } - } - - private Date getTodayStart() { - // 获取当天日期 - LocalDate today = LocalDate.now(); - // 当天日期与午夜时间的组合 - ZonedDateTime todayStart = today.atStartOfDay(ZoneId.systemDefault()); - - // 转换为java.util.Date - return Date.from(todayStart.toInstant()); - } - -} +//package com.casic.missiles.job.handler; +// +//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +//import com.casic.missiles.modular.alarm.entity.AlarmRecords; +//import com.casic.missiles.modular.alarm.entity.SuspendLog; +//import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +//import com.casic.missiles.modular.alarm.service.IApprovalLogService; +//import com.casic.missiles.modular.alarm.service.ISuspendLogService; +//import com.xxl.job.core.context.XxlJobHelper; +//import com.xxl.job.core.handler.annotation.XxlJob; +//import lombok.RequiredArgsConstructor; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.stereotype.Component; +// +//import java.time.LocalDate; +//import java.time.ZoneId; +//import java.time.ZonedDateTime; +//import java.util.Date; +//import java.util.List; +//import java.util.stream.Collectors; +// +//@Slf4j +//@Component +//@RequiredArgsConstructor +//public class SuspendExpireJobHandler { +// +// private final ISuspendLogService iSuspendLogService; +// private final IAlarmRecordsService iAlarmRecordsService; +// private final IApprovalLogService iApprovalLogService; +// +// /** +// * 挂起时间到期处理 +// */ +// @XxlJob("suspendExpireJobHandler") +// public void suspendExpireJobHandler() { +// XxlJobHelper.log("check suspend expire"); +//// Date today = getTodayStart(); +// QueryWrapper queryWrapper = new QueryWrapper<>(); +// queryWrapper.lt("EXPIRE_TIME", new Date()); +// queryWrapper.eq("VALID", "1"); +// List suspendLogList = iSuspendLogService.list(queryWrapper); +// if (suspendLogList != null && suspendLogList.size() > 0) { +// suspendLogList.forEach(suspendLog -> { +// suspendLog.setValid("0"); +// }); +// iSuspendLogService.updateBatchById(suspendLogList); +// //更新最新状态 +// List alarmIds = suspendLogList.stream().map(SuspendLog::getAlarmId).collect(Collectors.toList()); +// List alarmRecordsList = iAlarmRecordsService.changeProcessStatus(alarmIds); +// //添加流转日志 +// iApprovalLogService.saveSuspendLogs(alarmRecordsList); +// } +// } +// +// private Date getTodayStart() { +// // 获取当天日期 +// LocalDate today = LocalDate.now(); +// // 当天日期与午夜时间的组合 +// ZonedDateTime todayStart = today.atStartOfDay(ZoneId.systemDefault()); +// +// // 转换为java.util.Date +// return Date.from(todayStart.toInstant()); +// } +// +//} diff --git a/casic-public/src/main/java/com/casic/missiles/enums/AlarmEnum.java b/casic-public/src/main/java/com/casic/missiles/enums/AlarmEnum.java new file mode 100644 index 0000000..e73e469 --- /dev/null +++ b/casic-public/src/main/java/com/casic/missiles/enums/AlarmEnum.java @@ -0,0 +1,46 @@ +package com.casic.missiles.enums; + + +public enum AlarmEnum { + + + Sloping("Sloping", "倾斜报警"), + Destroy("Destroy", "破坏报警"), + DiscL("DiscL", "左侧断线报警"), + Leak("Leak", "泄露报警"), + DiscR("DiscR", "右侧断线报警"), + VibL("VibL", "左侧振动报警"), + VibR("VibR", "右侧振动报警"); +// VibL("自管", "1"), +// VibL("自管", "1"), +// VibL("自管", "1"); + + private String code; + private String value; + + AlarmEnum(String code, String value) { + this.code = code; + this.value = value; + } + + + public static String getValue(String code){ + for(AlarmEnum approvalStatusEnum :values()){ + if(approvalStatusEnum.code.equals(code)){ + return approvalStatusEnum.value; + } + } + return ""; + } + + + + public String getCode() { + return code; + } + + public String getValue() { + return value; + } + +} diff --git a/casic-public/src/main/java/com/casic/missiles/enums/DeviceDataEnum.java b/casic-public/src/main/java/com/casic/missiles/enums/DeviceDataEnum.java index 3fc6f08..13f5b23 100644 --- a/casic-public/src/main/java/com/casic/missiles/enums/DeviceDataEnum.java +++ b/casic-public/src/main/java/com/casic/missiles/enums/DeviceDataEnum.java @@ -4,11 +4,12 @@ public enum DeviceDataEnum { - DATA_GAS("燃气智能监测终端", "data_gas", "devcode,uptime,logtime,well_code", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime"), - DATA_GAS_LIQUID("燃气智能监测终端(一体化)", "data_gasliquid_gas", "devcode,uptime,logtime,well_code", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime"), - DATA_TUBE_OTHER("管网哨兵", "data_tube_other", "devcode,uptime,logtime,well_code", "DEVCODE,GASVAL, VBAT,SIN,RSRP,SINR,UPTIME,LOGTIME", "logtime"), - DATA_MONITOR_PIPE_OTHER("智能警示桩", "data_monitor_pipe_other", "devcode,uptime,logtime,well_number", "DEVCODE,TEMPERATURE,HUMIDITY,VBAT,PIPE_INCLINE_ALARM,PIPE_BREAK_ALARM,GAS_ALARM,LEFT_OFF_LINE_ALARM,LEFT_VIBRATE_ALARM,RIGHT_OFF_LINE_ALARM,RIGHT_VIBRATE_ALARM,PICTURE_ALARM,LEFT_GAS,RIGHT_GAS,LEFT_LENGTH,RIGHT_LENGTH,LOGTIME,UPTIME ", "logtime"), - DATA_PAN_GAS("场站监测云台", "data_pan_gas", "DEVICE_CODE,,logtime,LEDGER_CODE", "ID,LEDGER_NUMBER,DEVICE_CODE,CONCENTRATION,LOGTIME,DIRCETION,PITCH", "LOGTIME"); + DATA_GAS("燃气智能监测终端", "data_gas", "devcode,uptime,logtime,well_code", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime","cell,uptime"), + DATA_GAS_LIQUID("燃气智能监测终端(一体化)", "data_gasliquid_gas", "devcode,uptime,logtime,well_code", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime","cell,uptime"), + DATA_TUBE_OTHER("管网哨兵", "data_tube_other", "devcode,uptime,logtime,well_code", "DEVCODE,GASVAL, VBAT,SIN,RSRP,SINR,UPTIME,LOGTIME,sig,temp,SS_STATE as ssState", "logtime","VBAT,UPTIME"), + DATA_MONITOR_PIPE_OTHER("智能警示桩", "data_monitor_pipe_other", "devcode,uptime,logtime,well_number", "DEVCODE,TEMPERATURE,HUMIDITY,VBAT,PIPE_INCLINE_ALARM,PIPE_BREAK_ALARM,GAS_ALARM,LEFT_OFF_LINE_ALARM,LEFT_VIBRATE_ALARM,RIGHT_OFF_LINE_ALARM,RIGHT_VIBRATE_ALARM,PICTURE_ALARM,LEFT_GAS,RIGHT_GAS,LEFT_LENGTH,RIGHT_LENGTH,LOGTIME,UPTIME ", "logtime","VBAT as cell,uptime"), + DATA_PAN_GAS("场站监测云台", "data_pan_gas", "DEVICE_CODE,,logtime,LEDGER_CODE", "ID,LEDGER_NUMBER,DEVICE_CODE,CONCENTRATION,LOGTIME,DIRCETION,PITCH", "LOGTIME","CONCENTRATION as cell ,LOGTIME as uptime"), + DATA_GAS_OTHER("管网哨兵(一体化)", "data_gas_other", "devcode,uptime,logtime,well_code", "DEVCODE,GASVAL, VBAT,SIN,RSRP,SINR,UPTIME,LOGTIME,sig,temp,SS_STATE as ssState", "logtime","VBAT,UPTIME"); public static DeviceDataEnum typeOf(String type) { DeviceDataEnum deviceDataEnum = null; @@ -28,6 +29,9 @@ case "燃气智能监测终端(一体化)": deviceDataEnum = DATA_GAS_LIQUID; break; + case "管网哨兵(一体化)": + deviceDataEnum = DATA_GAS_OTHER; + break; default: deviceDataEnum = null; } @@ -39,13 +43,15 @@ String tableColumns; String orderColumn; String type; + String cellColumn; - DeviceDataEnum(String type, String tableName, String queryColumns, String tableColumns, String orderColumn) { + DeviceDataEnum(String type, String tableName, String queryColumns, String tableColumns, String orderColumn,String cellColumn) { this.type = type; this.queryColumns = queryColumns; this.tableName = tableName; this.tableColumns = tableColumns; this.orderColumn = orderColumn; + this.cellColumn = cellColumn; ; } @@ -98,4 +104,12 @@ public void setType(String type) { this.type = type; } + + public String getCellColumn() { + return cellColumn; + } + + public void setCellColumn(String cellColumn) { + this.cellColumn = cellColumn; + } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java new file mode 100644 index 0000000..fc881a1 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.data.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 外协管盯 前端控制器 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RestController +@RequestMapping("/system/dataGasOther") +public class DataGasOtherController { + +} + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java new file mode 100644 index 0000000..b5f3627 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.data.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 外协管盯 Mapper 接口 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Mapper +public interface DataGasOtherMapper extends BaseMapper { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml new file mode 100644 index 0000000..8ce1455 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID, DEVCODE, WELL_CODE, WELL_NUMBER, GASVAL, VBAT, BATSTA, SIN, RSRP, SINR, UPTIME, LOGTIME, SIG, TEMP, SS_STATE + + + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java new file mode 100644 index 0000000..53972ba --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java @@ -0,0 +1,94 @@ +package com.casic.missiles.modular.data.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 外协管盯 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Builder +@Data +@TableName("data_gas_other") +@ApiModel(value = "DataGasOther对象", description = "外协管盯") +public class DataGasOther implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId("ID") + private Long id; + + @ApiModelProperty("设备编号") + @TableField("DEVCODE") + private String devcode; + + @ApiModelProperty("点位编号") + @TableField("WELL_CODE") + private String wellCode; + + @ApiModelProperty("位号") + @TableField("WELL_NUMBER") + private String wellNumber; + + @ApiModelProperty("气体浓度采样值") + @TableField("GASVAL") + private String gasval; + + @ApiModelProperty("设备电池电压值(毫伏)") + @TableField("VBAT") + private String vbat; + + @ApiModelProperty("电池状态0 正常、 1 低电告警、2 关机") + @TableField("BATSTA") + private String batsta; + + @ApiModelProperty("接收信号强度等级") + @TableField("SIN") + private String sin; + + @ApiModelProperty("接收信号参考质量 服务小 区的 RSRP 值") + @TableField("RSRP") + private String rsrp; + + @ApiModelProperty("信噪比") + @TableField("SINR") + private String sinr; + + @ApiModelProperty("采集时间") + @TableField("UPTIME") + private Date uptime; + + @ApiModelProperty("上传时间") + @TableField("LOGTIME") + private Date logtime; + + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态,0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java index 86077b8..f4d4417 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java @@ -76,4 +76,17 @@ private Date logtime; + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态:0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java new file mode 100644 index 0000000..842ca0b --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.data.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.data.entity.DataGasOther; + +/** + *

+ * 外协管盯 服务类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +public interface IDataGasOtherService extends IService { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java new file mode 100644 index 0000000..4c660e9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java @@ -0,0 +1,226 @@ +package com.casic.missiles.modular.data.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.enums.DeviceTypeEnum; +import com.casic.missiles.enums.DictEnum; +import com.casic.missiles.modular.alarm.dto.AlarmDeviceRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.AlarmRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.BusAlarmLedgerDTO; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.data.dao.DataGasMapper; +import com.casic.missiles.modular.data.dao.DataGasOtherMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import com.casic.missiles.modular.data.entity.DataTubeOther; +import com.casic.missiles.modular.data.service.IDataAbstractService; +import com.casic.missiles.modular.data.service.IDataGasOtherService; +import com.casic.missiles.modular.data.service.ITrackLogService; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Optional; + +/** + *

+ * 外协管盯 服务实现类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RequiredArgsConstructor +@Service +public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { + + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + private final DataGasMapper dataGasMapper; + private final IAlarmRecordsService alarmRecordsService; + private final IAlarmRuleService alarmRuleService; + private final ITrackLogService iTrackLogService; + private final IBusDeviceService busDeviceService; + + @Override + public void process(String dataContent) { + + //解析数据+根据业务处理存储数据 + JSONObject json = JSONObject.parseObject(dataContent); + String devCode = json.get("devCode").toString(); + JSONObject jsonObject = json.getJSONObject("mBody"); + if (mType[0].equals(json.get("mType")) || mType[3].equals(json.get("mType"))) {//存储上报数据 + this.processNormalData(jsonObject, devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + this.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.TubeOther.name().equals(json.get("devType"))) { + if ("TubeOtherConfigSuccess".equals(jsonObject.get("bType"))) { +// deviceConfigManager.updateStatus(devCode); + } + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } else if (mType[4].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); +// imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; + try { + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); + } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + } + } + + @Transactional + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.getString("cell"); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = jsonObject.getJSONArray("datas"); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + String bfcf = busDeviceService.getBfcf(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).getString("gasval"); + String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); + String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); + String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataGasOther.builder() + .wellCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .wellNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .devcode(devCode) +// .cell(cell) + .gasval(gas) + .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime))) + .logtime(new Date()) + .vbat(vbat) + .batsta(batsta) + .rsrp(rsrp) + .sin(pci) + .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) + .build());//存储采集数据 + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) continue; + + //3.清除设备告警 + alarmRecordsService.cancelDeviceAlarm(devCode); + //4.存报警 + //若没绑定井,则不产生报警 + boolean alarmFlag = false; + if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { + //获取报警规则 + List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); + for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { + if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && + Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { + alarmFlag = true; + //写入报警 + //1、判断报警是否已存在 + if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.TubeOther.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); + //7.更新管线状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java index d248540..b33a1ee 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java @@ -91,7 +91,6 @@ } - public List getBusAlarmLedgerList(String devCode) { return this.dataGasMapper.getListByDevCode(devCode); } @@ -113,6 +112,13 @@ for (int i = 0; i < jsonArray.size(); i++) { try { String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) .findFirst(); @@ -175,18 +181,18 @@ alarmRecordsService.cancelDeviceAlarm(devCode); //4.存报警 //若没绑定井,则不产生报警 - boolean alarmFlag = false; + boolean alarmFlag = false; if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { //获取报警规则 List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { - alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); } break; } @@ -197,7 +203,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及设备状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新监测井状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java index e848fce..6297093 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java @@ -84,42 +84,78 @@ } - @Transactional - public void processAlarmData(JSONObject jsonObject, String devCode) { - JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + public void processEventAlarm(String devCode, String eventTypeCode, String logTime, String eventValue) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - //获取报警事件 - List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - - List busWellDTOList = dataGasMapper.getListByDevCode(devCode); - //若没绑定井,则不产生报警 - if (busWellDTOList != null && busWellDTOList.size() > 0) { - - for (int i = 0; i < jsonArray.size(); i++) { + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + //特殊处理消警 + if ("0".equals(eventValue)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, eventTypeCode); + } + return; } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> eventTypeCode.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 - if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + if (!alarmDeviceRuleResponseDTO.isPresent()) return; //1.查询是否已存在该类报警 - if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) return; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); - - + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + } + } + } + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + try { + String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmEventCode)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } } } } @@ -169,7 +205,76 @@ .rightVibrateAlarm(VibR) .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(uptime))) .logtime(new Date()) - .build());//存储采集数据 + .build()); + + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + ruleResponseDTOList.forEach(ruleResponseDTO -> { + + if ("Sloping".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Sloping)&&(!alarmRecordsService.isWatchAlarms(devCode,"Sloping"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Sloping", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Sloping)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Sloping"); + + } + } + if ("Destroy".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Destroy)&&(!alarmRecordsService.isWatchAlarms(devCode,"Destroy"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Destroy", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Destroy)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Destroy"); + + } + } + if ("Leak".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Leak)&&(!alarmRecordsService.isWatchAlarms(devCode,"Leak"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Leak", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Leak)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Leak"); + + } + } + if ("DiscL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscL)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscL"); + + } + } + if ("DiscR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscR)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscR"); + } + } + + if ("VibL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibL)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibL"); + } + } + if ("VibR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibR)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibR"); + } + } + }); + +// //处理报警事件 +// processEventAlarm(devCode,"Sloping",uptime,Sloping); +// processEventAlarm(devCode,"Destroy",uptime,Destroy); +// processEventAlarm(devCode,"Leak",uptime,Leak); +// processEventAlarm(devCode,"DiscL",uptime,DiscL); +// processEventAlarm(devCode,"DiscR",uptime,DiscR); +// processEventAlarm(devCode,"VibL",uptime,VibL); +// processEventAlarm(devCode,"VibR",uptime,VibR); + //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -197,7 +302,7 @@ if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && gas >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), gas)) { @@ -213,7 +318,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R,alarmFlag?"燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R, alarmFlag ? "燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java index f913775..895d201 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java @@ -89,6 +89,7 @@ String bfcf = busDeviceService.getBfcf(devCode); if (DictEnum.BF_ON.equals(bfcf)) { JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); //获取报警事件 List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); List busWellDTOList = dataGasMapper.getListByDevCode(devCode); @@ -96,25 +97,43 @@ if (busWellDTOList != null && busWellDTOList.size() > 0) { for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 if (!alarmDeviceRuleResponseDTO.isPresent()) continue; //1.查询是否已存在该类报警 if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { @@ -141,6 +160,9 @@ String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); gas = String.format("%.2f", Double.valueOf(gas)); //1.存数据 save(DataTubeOther.builder() @@ -156,6 +178,9 @@ .rsrp(rsrp) .sin(pci) .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) .build());//存储采集数据 //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -186,7 +211,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 98e736b..2288075 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -216,5 +216,15 @@ public ReturnDTO syncDeviceStatus() { return ReturnUtil.success(iBusDeviceService.syncDeviceStatus()); } + + @ApiOperation("根据闸井id获取设备信息") + @PostMapping("/getListByWellId") + @ResponseBody + public ReturnDTO getListByWellId(@RequestBody IdDTO idDTO) { + Assert.isFalse(ObjectUtil.isEmpty(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iBusDeviceService.getListByWellId(idDTO.getId())); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java index 72a2d84..d6d9743 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java @@ -85,6 +85,7 @@ return ReturnUtil.success(iBusLedgerService.detail(idDTO.getId())); } + /** * 同步三级部门 * diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java index 9e412d2..4316b56 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java @@ -1,22 +1,33 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.response.ErrorResponseData; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; +import com.casic.missiles.modular.device.dto.BusPositionImportDTO; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.ReturnUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataAccessException; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; /** @@ -40,8 +51,44 @@ @PostMapping("/addPosition") @ResponseBody public ReturnDTO addPosition(@RequestBody BusLedgerPipe busLedgerPipe) { + + List busLedgerPipeList = iBusLedgerPipeService.getListByNumber(busLedgerPipe.getTagNumber()); + if(busLedgerPipeList!=null&&busLedgerPipeList.size()>0){ + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE,"安装位号已存!!!"); + } + Long id =IdUtil.getSnowflake(1,2).nextId(); + busLedgerPipe.setId(id); iBusLedgerPipeService.save(busLedgerPipe); - return ReturnUtil.success(busLedgerPipe.getId()); + return ReturnUtil.success(id); + } + + @ApiOperation("批量导入") + @RequestMapping(value = "/batchImport", method = RequestMethod.POST) + @ResponseBody + public Object batchImport(@RequestParam("file") MultipartFile file) { + List results = new ArrayList<>(); + try { + results = this.importExcel(BusPositionImportDTO.class, file, null, null); + List list = iBusLedgerPipeService.addPositionBatch(results); + if (!CollectionUtil.isEmpty(list)) { + //获取校验报错信息 + return new ErrorResponseData(list.get(0)); + } + } catch (Exception e) { + return catchMybatisPlusException(e, "导入位置信息失败"); + } + return ResponseData.success(); + } + + private ResponseData catchMybatisPlusException(Exception e, String errorMsg) { + if (e instanceof DataAccessException) { + DataAccessException mybatisPlusException = (DataAccessException) e; + String message = mybatisPlusException.getRootCause().getMessage(); + if (message.contains("Duplicate entry '")) { + return new ErrorResponseData("安装位号重复:" + message.replaceAll("Duplicate entry '", "").replaceAll("' for key 'DEVCODE'", "")); + } + } + return new ErrorResponseData(errorMsg); } @ApiOperation("编辑点位") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java index d1e08a8..d938876 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java @@ -51,6 +51,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getOperatorName()), "CREATE_USER", request.getOperatorName()); queryWrapper.ge(ObjectUtil.isNotEmpty(request.getStartTime()), "START_TIME", request.getStartTime()); queryWrapper.le(ObjectUtil.isNotEmpty(request.getEndTime()), "END_TIME", request.getEndTime()); + queryWrapper.orderByDesc("START_TIME"); return ReturnUtil.success(super.packForBT(iSyncLogService.page(page, queryWrapper))); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java index 5ee5291..23ddee9 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java @@ -73,4 +73,12 @@ " where bd.DEVCODE= #{devcode} and bd.VALID=1 " + ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD asc") List getDeviceTypeRule(@Param("devcode") String devcode); + + + @Select("SELECT bd.* from bus_device bd " + + "left JOIN bus_device_ledger bl on bd.id= bl.DEVICE_ID and bl.VALID=1 " + + "LEFT JOIN bus_ledger_all_view bv on bv.id= bl.LEDGER_ID and bv.type= bl.TYPE and bv.VALID=1 " + + "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") + List getListByWellId(@Param("wellId") Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java index e1d16c4..a4c3f7a 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java @@ -37,7 +37,7 @@ @Select("SELECT b.ORG_ID,b.ORG_CODE,b.ORG_NAME,b.PARENT_ID FROM `bus_sync_org_relation` b WHERE b.DEL_FLAG =0 and b.PARENT_ID = #{syncId} ") List synDept(@Param("syncId") String syncId); - @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view ") + @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view where VALID=1") List getBusLedgers(); @Select("SELECT DEVCODE FROM `bus_device` where VALID>0 ") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml index 99ef10b..c6d1fff 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml @@ -29,6 +29,7 @@ bp.DEVICE_MODEL as deviceModel, bt.TYPE_NAME as typeName, + bp.DATA_SERVICE as deviceCategory, bm.`NAME` as manufactureName, bl.tagNumber as tagNumber, bl.id as ledgerId, @@ -81,6 +82,10 @@ and bd.LOGTIME #{request.logTime2} + + and bp.DATA_SERVICE =#{request.deviceCategory} + + ORDER BY bd.INSTALL_DATE DESC diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml index bdadb6a..d3f4684 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml @@ -40,7 +40,7 @@ `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + AND bdl.VALID = 1 JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -99,8 +99,8 @@ bm.`NAME` as manufactureName FROM `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE - LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID and bdl.type=blp.type + AND bdl.VALID = 1 LEFT JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -117,7 +117,9 @@ WITH station_temp as(SELECT bl.ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID FROM `bus_ledger` bl where bl.VALID=1 and bl.TYPE =2) - select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME from station_temp bl + select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME,bd.DEVCODE from station_temp bl left join bus_device_ledger bdl on bdl.LEDGER_ID = bl.ID and bdl.TYPE =2 and bdl.valid=1 left join bus_device bd on bd.id= bdl.DEVICE_ID and bd.VALID=1 order by bl.ID diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml index 7b92b04..1d97c64 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml @@ -184,7 +184,7 @@ WHERE EQ_LOCNO like 'N%' and - EQ_CATEGORY in (1,3) + EQ_CATEGORY in (1,2,3,5) diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java index 859cf08..143b42d 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java @@ -23,6 +23,9 @@ @ApiModelProperty("设备类型id") private Long typeId; + @ApiModelProperty("产品名称") + private String productName; + @ApiModelProperty("指令集合") private List commandConfigList; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java index 646610b..2cb5894 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("最新上传结束时间") private String logTime2; + + @ApiModelProperty("设备类别(0:自有设备,1:数据服务)") + private String deviceCategory; } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java index 8c95537..28b30fa 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java @@ -44,6 +44,9 @@ @ExcelProperty("关联管线") private String pipeCode; + @ExcelProperty("监测类型") + private String monitorType; + private String watchObject; private Long deviceType; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java index 0980c34..ac5daf0 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java @@ -24,4 +24,7 @@ @ApiModelProperty("详细位置") private String position; + @ApiModelProperty("1:其他,3:管线") + private String type; + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java new file mode 100644 index 0000000..bce7ebd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.device.dto; + + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class BusPositionImportDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + + @ExcelProperty("管线编号") + private String pipeCode; + + @ExcelProperty("安装位号") + private String tagNumber; + + @ExcelProperty("经度(高德)") + private String lngGaode; + + @ExcelProperty("纬度(高德)") + private String latGaode; + + @ExcelProperty("详细位置") + private String position; + + @ExcelProperty("管理单位") + private Long deptid; + + @ExcelProperty("位置类别") + private String type; + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java index 58faa0e..d72ae78 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java @@ -16,13 +16,13 @@ private String deviceId; //移动命令:left right up down left_up left_down right_up right_down GOTO_PRESET - @ApiModelProperty("移动命令") + @ApiModelProperty("移动命令(left right up down left_up left_down right_up right_down)") private String command; - @ApiModelProperty("速度") + @ApiModelProperty("速度,一般传100") private String speed; - @ApiModelProperty("启停命令") + @ApiModelProperty("启停命令(0:开始,1:结束)") private String cameraAction; @ApiModelProperty("预置点编号") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java index b4ec73c..5a3d0b0 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java @@ -66,7 +66,7 @@ private String powerSupplyMode; - @ApiModelProperty("是否结束数据服务") + @ApiModelProperty("是否结束数据服务(1:是,0:否)") @TableField("DATA_SERVICE") private String dataService; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java index 1184995..407e3c1 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java @@ -193,10 +193,14 @@ @TableField(exist = false) private String bfztName; + @ApiModelProperty("设备类别(0:自有设备,1:数据服务)") + @TableField(exist = false) + private String deviceCategory; + public BusDevice() { } - public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds) { + public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds, String monitorType) { this.devcode = devcode; this.deviceType = deviceType; this.productId = productId; @@ -204,6 +208,7 @@ this.installDate = installDate; this.watchObject = watchObject; this.ledgerIds = ledgerIds; + this.monitorType = monitorType; } public static List convertDeviceList(List dtoList) { @@ -227,7 +232,8 @@ deviceImportDTO.getValid(), deviceImportDTO.getInstallDate(), deviceImportDTO.getWatchObject(), - deviceImportDTO.getLedgerIds())); + deviceImportDTO.getLedgerIds(), + deviceImportDTO.getMonitorType())); }); return busDeviceList; } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java index 12b52de..1ac8455 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java @@ -1,16 +1,20 @@ package com.casic.missiles.modular.device.entity; +import cn.hutool.core.util.IdUtil; 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 com.casic.missiles.modular.device.dto.BusPositionImportDTO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import java.io.Serializable; +import java.util.ArrayList; import java.util.Date; +import java.util.List; /** *

@@ -29,7 +33,7 @@ private static final long serialVersionUID = 1L; @ApiModelProperty("主键") - @TableId(value = "ID", type = IdType.AUTO) +// @TableId(value = "ID", type = IdType.AUTO) private Long id; @ApiModelProperty("编号") @@ -60,6 +64,10 @@ @TableField("DEPTID") private Long deptid; + @ApiModelProperty("类别(1:其他,3:管线)") + @TableField("`TYPE`") + private String type; + @ApiModelProperty("责任部门") @TableField("RESPONSIBLE_DEPT") private Long responsibleDept; @@ -110,9 +118,10 @@ public BusLedgerPipe() { } - public BusLedgerPipe(String pipeCode, String ledgerName, String tagNumber, + public BusLedgerPipe(Long id,String pipeCode, String ledgerName, String tagNumber, String lngGaode, String latGaode, String position, - Long deptid, String devcode) { + Long deptid, String devcode, String type) { + this.id=id; this.pipeCode = pipeCode; this.ledgerName = ledgerName; this.tagNumber = tagNumber; @@ -121,5 +130,26 @@ this.position = position; this.deptid = deptid; this.devcode = devcode; + this.type = type; } + + public static List convertDeviceList(List dtoList) { + + + List busDeviceList = new ArrayList<>(); + dtoList.forEach(positionImportDTO -> { + + busDeviceList.add(new BusLedgerPipe(IdUtil.getSnowflake(1,2).nextId(),positionImportDTO.getPipeCode(), + positionImportDTO.getTagNumber(), + positionImportDTO.getTagNumber(), + positionImportDTO.getLngGaode(), + positionImportDTO.getLatGaode(), + positionImportDTO.getPosition(), + positionImportDTO.getDeptid(), + "", + positionImportDTO.getType())); + }); + return busDeviceList; + } + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java index aaaa409..63c0576 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java @@ -52,4 +52,8 @@ List getDeviceRule(String devcode); + List getDevicesByCodes(List devcodes); + + List getListByWellId(Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java index 14f6a93..8692383 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java @@ -2,11 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; -import com.casic.missiles.core.datascope.DataScope; -import com.casic.missiles.modular.device.dto.BusLedgerPipeMonitorRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeResponseDTO; -import com.casic.missiles.modular.device.dto.MonitorDataRequestDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import java.util.List; @@ -26,17 +22,21 @@ Page monitorPipePageList(Page page, BusLedgerPipeMonitorRequestDTO request); - BusLedgerPipeResponseDTO detail(Long id,String devcode); + BusLedgerPipeResponseDTO detail(Long id, String devcode); - List> watchDataByPipe(MonitorDataRequestDTO requestDTO); + List> watchDataByPipe(MonitorDataRequestDTO requestDTO); - List> pipeList(); + List> pipeList(); - List> deviceList(); + List> deviceList(); BusLedgerPipe saveBusLedgerPipe(BusLedgerPipe busLedgerPipe); Boolean updateMonitorStatus(List tagNumbers); + List addPositionBatch(List results); + + List getListByNumber(String tagNumber); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java index 66ed812..ad72230 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java @@ -12,9 +12,12 @@ import com.casic.missiles.modular.device.dto.BusConfigOtherDTO; import com.casic.missiles.modular.device.dto.BusConfigRequestDTO; import com.casic.missiles.modular.device.entity.BusConfig; +import com.casic.missiles.modular.device.entity.BusDevice; import com.casic.missiles.modular.device.service.IBusConfigService; +import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.HttpClientUtils; import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -22,6 +25,9 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.LinkedBlockingDeque; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; /** *

@@ -36,6 +42,11 @@ public class BusConfigServiceImpl extends ServiceImpl implements IBusConfigService { private final AbstractPermissionContext abstractPermissionContext; + private final IBusDeviceService iBusDeviceService; + private final ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(3, 6, 60, TimeUnit.SECONDS, new LinkedBlockingDeque<>(10)); + + @Value("${casic.brSendConfigUrl}") + private String brSendConfigUrl; @Transactional @Override @@ -105,6 +116,42 @@ .operator(user != null ? user.getId() : null) .operatorName(user != null ? user.getName() : "").build()); }); + + + threadPoolExecutor.execute( + () -> { + //发送第三方下发: + if (busConfigOtherDTO.getProductName().contains("管网哨兵")) { + List busDeviceList = iBusDeviceService.getDevicesByCodes(devcodes); + for (BusDevice busDevice : busDeviceList) { + if (ObjectUtil.isAllNotEmpty(busDevice.getNbProductId(), busDevice.getNbDeviceId())) { + Map commandMap = new HashMap<>(); + commandMap.put("productId", busDevice.getNbProductId()); + commandMap.put("devCode", busDevice.getDevcode()); + commandMap.put("deviceId", busDevice.getNbDeviceId()); + commandMap.put("cmdList", busConfigOtherDTO.getCommandConfigList()); + HttpClientUtils.post(brSendConfigUrl+"/tube/config/send", JSON.toJSONString(commandMap)); + } + } + } else if (busConfigOtherDTO.getProductName().contains("智能警示桩")) { + + List busDeviceList = iBusDeviceService.getDevicesByCodes(devcodes); + for (BusDevice busDevice : busDeviceList) { + if (ObjectUtil.isAllNotEmpty(busDevice.getNbProductId(), busDevice.getNbDeviceId())) { + Map commandMap = new HashMap<>(); + commandMap.put("productId", busDevice.getNbProductId()); + commandMap.put("devCode", busDevice.getDevcode()); + commandMap.put("deviceId", busDevice.getNbDeviceId()); + commandMap.put("cmdList", busConfigOtherDTO.getCommandConfigList()); + HttpClientUtils.post(brSendConfigUrl+"/sentinel/config/send", JSON.toJSONString(commandMap)); + } + } + + } + } + ); + + return this.saveBatch(busConfigs); // List> mapList = new ArrayList<>(); // Map commandMap = new HashMap<>(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java index 60d15e5..bae6902 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java @@ -3,6 +3,7 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -80,6 +81,7 @@ @Override public Page listPage(Page page, BusDeviceDTO request) { + page.setOptimizeCountSql(false); Page busDevicePage = this.baseMapper.pageList(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List busDeviceList = busDevicePage.getRecords(); busDeviceList.forEach(busDevice -> { @@ -227,7 +229,7 @@ if (deviceDataEnum.getTableColumns().contains("cell")) { String[] queryColumns = deviceDataEnum.getQueryColumns().split(",", 4); resultMap = this.baseMapper.cellAnalysis(deviceDataEnum.getTableName(), - "cell,uptime", + deviceDataEnum.getCellColumn(), queryColumns[0], queryColumns[1], deviceDataEnum.getOrderColumn(), @@ -265,14 +267,13 @@ } else { List busDeviceLedgers = busDeviceLedgerService.getListByDeviceId(busDevice.getId()); //没绑定关系,先绑定 - if (ObjectUtil.isNotEmpty(busDeviceLedgers)) { + if (busDeviceLedgers == null || busDeviceLedgers.size() < 1) { busDeviceLedgerService.saveDeviceLedger(busDevice.getId(), busDevice.getLedgerIds(), busDevice.getWatchObject()); } else { //已绑定,判断是否位置变了 List ledgerIdsPre = busDeviceLedgers.stream().map(BusDeviceLedger::getLedgerId).collect(Collectors.toList()); if (ledgerIds.containsAll(ledgerIdsPre) && ledgerIdsPre.containsAll(ledgerIds)) { } else { - busDeviceLedgerService.deleteDeviceLedgers(Arrays.asList(busDevice.getId())); busDeviceLedgerService.saveDeviceLedger(busDevice.getId(), busDevice.getLedgerIds(), busDevice.getWatchObject()); } } @@ -304,6 +305,8 @@ List codeList = iBusLedgerService.getCodeLists(); //获取管线编号 List pipeCodeList = iBusLedgerService.getPipeCodeList(); + List pipeList = new ArrayList<>(); + final Integer[] index = {1}; results.forEach(deviceImportDTO -> { index[0]++; @@ -357,22 +360,16 @@ return; } //新增点位 - if ("3".equals(deviceImportDTO.getWatchObject())) { + if ("3".equals(deviceImportDTO.getWatchObject()) || "1".equals(deviceImportDTO.getWatchObject())) { //toDo:安装位号一致,入一次即可 //为管线 - BusLedgerPipe busLedgerPipe = new BusLedgerPipe(deviceImportDTO.getPipeCode(), deviceImportDTO.getTagNumber(), + Long pipeLedgerId = IdUtil.getSnowflake(1, 2).nextId(); + BusLedgerPipe busLedgerPipe = new BusLedgerPipe(pipeLedgerId, deviceImportDTO.getPipeCode(), deviceImportDTO.getTagNumber(), deviceImportDTO.getTagNumber(), deviceImportDTO.getLng(), deviceImportDTO.getLat(), - deviceImportDTO.getPosition(), deviceImportDTO.getDeptid(), deviceImportDTO.getDevCode()); - busLedgerPipe = iBusLedgerPipeService.saveBusLedgerPipe(busLedgerPipe); - deviceImportDTO.setLedgerIds(Arrays.asList(busLedgerPipe.getId())); - }else if("1".equals(deviceImportDTO.getWatchObject())){ - //新增闸井 - BusLedger busLedger = new BusLedger(deviceImportDTO.getTagNumber(), - deviceImportDTO.getTagNumber(),deviceImportDTO.getTagNumber(), - deviceImportDTO.getLng(),deviceImportDTO.getLat(),deviceImportDTO.getPosition(), - deviceImportDTO.getDeptid()); - this.iBusLedgerService.save(busLedger); - deviceImportDTO.setLedgerIds(Arrays.asList(busLedger.getId())); + deviceImportDTO.getPosition(), deviceImportDTO.getDeptid(), deviceImportDTO.getDevCode(), deviceImportDTO.getWatchObject()); +// busLedgerPipe = iBusLedgerPipeService.saveBusLedgerPipe(busLedgerPipe); + pipeList.add(busLedgerPipe); + deviceImportDTO.setLedgerIds(Arrays.asList(pipeLedgerId)); } } @@ -383,6 +380,10 @@ return list; } + if (pipeList != null && pipeList.size() > 0) { + iBusLedgerPipeService.saveBatch(pipeList); + } + List busDeviceList = BusDevice.convertDeviceList(results); //保存设备信息 @@ -514,7 +515,7 @@ } -// @Cacheable(value = "alarmRuleCache", key = "#devcode") + // @Cacheable(value = "alarmRuleCache", key = "#devcode") @Override public List getDeviceRule(String devcode) { List alarmRuleValueList = this.baseMapper.getSpecialDeviceRule(devcode); @@ -523,4 +524,18 @@ } return alarmRuleValueList; } + + + @Override + public List getDevicesByCodes(List devcodes) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("DEVCODE", devcodes); + queryWrapper.eq("VALID", "1"); + return this.baseMapper.selectList(queryWrapper); + } + + @Override + public List getListByWellId(Long wellId) { + return this.baseMapper.getListByWellId(wellId); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java index 5073159..7f8bfdc 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service.impl; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -12,11 +13,8 @@ import com.casic.missiles.enums.DeviceDataEnum; import com.casic.missiles.modular.device.dao.BusDeviceMapper; import com.casic.missiles.modular.device.dao.BusLedgerPipeMapper; -import com.casic.missiles.modular.device.dto.BusLedgerPipeMonitorRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeResponseDTO; -import com.casic.missiles.modular.device.dto.MonitorDataRequestDTO; -import com.casic.missiles.modular.device.entity.BusLedgerPipe; +import com.casic.missiles.modular.device.dto.*; +import com.casic.missiles.modular.device.entity.*; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.server.CommonServer; @@ -24,11 +22,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.stream.Collectors; /** *

@@ -63,6 +60,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getPipeCode()), "PIPE_CODE", request.getPipeCode()); queryWrapper.like(ObjectUtil.isNotEmpty(request.getPosition()), "POSITION", request.getPosition()); queryWrapper.in(ObjectUtil.isNotEmpty(deptIds), "DEPTID", deptIds); + queryWrapper.eq(ObjectUtil.isNotEmpty(request.getType()), "TYPE", request.getType()); Page pipePage = this.page(page, queryWrapper); List pipeList = pipePage.getRecords(); pipeList.forEach(pipe -> { @@ -156,6 +154,12 @@ return busLedgerPipe; } + public List getList() { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("VALID", "1"); + return this.baseMapper.selectList(queryWrapper); + } + @Override public Boolean updateMonitorStatus(List tagNumbers) { UpdateWrapper updateWrapper = new UpdateWrapper<>(); @@ -163,4 +167,43 @@ updateWrapper.set("MONITOR_STATE", "3"); return this.update(updateWrapper); } + + @Transactional + @Override + public List addPositionBatch(List results) { + List list = new ArrayList<>(); + if (!CollectionUtil.isEmpty(results)) { + List busLedgerPipeList = this.getList(); + List tagCodes = busLedgerPipeList.stream().map(BusLedgerPipe::getTagNumber).collect(Collectors.toList()); + final Integer[] index = {1}; + results.forEach(busPositionImportDTO -> { + index[0]++; + //设备编号查重 + if (tagCodes.contains(busPositionImportDTO.getTagNumber())) { + list.add("第" + index[0] + "行,安装位号已存在!"); + return; + } + + }); + if (CollectionUtil.isNotEmpty(list)) { + return list; + } + List busDeviceList = BusLedgerPipe.convertDeviceList(results); + + //保存点位信息 + this.saveBatch(busDeviceList); + + } else { + list.add("导入数据不能为空"); + } + return list; + } + + @Override + public List getListByNumber(String tagNumber) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("VALID", "1"); + queryWrapper.eq("TAG_NUMBER", tagNumber); + return this.baseMapper.selectList(queryWrapper); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java index 5798675..ec2b3f5 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.modular.device.dao.SyncLogMapper; import com.casic.missiles.modular.device.entity.SyncLog; import com.casic.missiles.modular.device.service.ISyncLogDetailService; @@ -39,7 +40,8 @@ syncLog.setUpdateCount(updateCount); syncLog.setAddCount(addCount); syncLog.setDeleteCount(deleteCount); - syncLog.setCreateUser(permissionContext.getAuthService().getLoginUser().getName()); + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + syncLog.setCreateUser(null == authUser ? "admin" : authUser.getName()); return this.baseMapper.insert(syncLog) > 0 ? true : false; } diff --git a/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java index b80c202..6be2b47 100644 --- a/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java +++ b/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -1,56 +1,56 @@ -package com.casic.missiles.job.config; - -import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - - -@Slf4j -@Configuration -@Data -@ConditionalOnExpression("T(org.apache.commons.lang3.StringUtils).isNotEmpty('${xxl.job.admin.addresses}')") -public class XxlJobConfig { - @Value("${xxl.job.admin.addresses}") - private String adminAddresses; - - @Value("${xxl.job.accessToken}") - private String accessToken; - - @Value("${xxl.job.executor.appname}") - private String appname; - -// @Value("${xxl.job.executor.address}") -// private String address; - - @Value("${xxl.job.executor.ip}") - private String ip; - - @Value("${xxl.job.executor.port}") - private int port; - - @Value("${xxl.job.executor.logpath}") - private String logPath; - - @Value("${xxl.job.executor.logretentiondays}") - private int logRetentionDays; - - @Bean - public XxlJobSpringExecutor xxlJobExecutor() { - log.info(">>>>>>>>>>> xxl-job config init."); - XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); - xxlJobSpringExecutor.setAdminAddresses(adminAddresses); - xxlJobSpringExecutor.setAppname(appname); -// xxlJobSpringExecutor.setAddress(address); - xxlJobSpringExecutor.setIp(ip); - xxlJobSpringExecutor.setPort(port); - xxlJobSpringExecutor.setAccessToken(accessToken); - xxlJobSpringExecutor.setLogPath(logPath); - xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); - - return xxlJobSpringExecutor; - } -} +//package com.casic.missiles.job.config; +// +//import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +//import lombok.Data; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.beans.factory.annotation.Value; +//import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; +//import org.springframework.context.annotation.Bean; +//import org.springframework.context.annotation.Configuration; +// +// +//@Slf4j +//@Configuration +//@Data +//@ConditionalOnExpression("T(org.apache.commons.lang3.StringUtils).isNotEmpty('${xxl.job.admin.addresses}')") +//public class XxlJobConfig { +// @Value("${xxl.job.admin.addresses}") +// private String adminAddresses; +// +// @Value("${xxl.job.accessToken}") +// private String accessToken; +// +// @Value("${xxl.job.executor.appname}") +// private String appname; +// +//// @Value("${xxl.job.executor.address}") +//// private String address; +// +// @Value("${xxl.job.executor.ip}") +// private String ip; +// +// @Value("${xxl.job.executor.port}") +// private int port; +// +// @Value("${xxl.job.executor.logpath}") +// private String logPath; +// +// @Value("${xxl.job.executor.logretentiondays}") +// private int logRetentionDays; +// +// @Bean +// public XxlJobSpringExecutor xxlJobExecutor() { +// log.info(">>>>>>>>>>> xxl-job config init."); +// XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); +// xxlJobSpringExecutor.setAdminAddresses(adminAddresses); +// xxlJobSpringExecutor.setAppname(appname); +//// xxlJobSpringExecutor.setAddress(address); +// xxlJobSpringExecutor.setIp(ip); +// xxlJobSpringExecutor.setPort(port); +// xxlJobSpringExecutor.setAccessToken(accessToken); +// xxlJobSpringExecutor.setLogPath(logPath); +// xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); +// +// return xxlJobSpringExecutor; +// } +//} diff --git a/casic-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java index 798424c..3785003 100644 --- a/casic-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java +++ b/casic-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -1,37 +1,37 @@ -package com.casic.missiles.job.handler; - - -import com.xxl.job.core.biz.model.ReturnT; -import com.xxl.job.core.context.XxlJobHelper; -import com.xxl.job.core.handler.annotation.XxlJob; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; - -/** - * XxlJob开发示例(Bean模式) - * - * 开发步骤: - * 1、任务开发:在Spring Bean实例中,开发Job方法; - * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 - * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; - * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; - */ -@Slf4j -@Component -public class DemoJobHandler { - - @XxlJob(value = "demoHandler") - public ReturnT execute(String param) throws Exception { - System.out.println("调度任务Demo执行"); - XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); - -// for (int i = 0; i < 5; i++) { -// XxlJobLogger.log("beat at:" + i); -// TimeUnit.SECONDS.sleep(2); -// } - return SUCCESS; - } - -} +//package com.casic.missiles.job.handler; +// +// +//import com.xxl.job.core.biz.model.ReturnT; +//import com.xxl.job.core.context.XxlJobHelper; +//import com.xxl.job.core.handler.annotation.XxlJob; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.stereotype.Component; +// +//import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; +// +///** +// * XxlJob开发示例(Bean模式) +// * +// * 开发步骤: +// * 1、任务开发:在Spring Bean实例中,开发Job方法; +// * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 +// * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; +// * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; +// */ +//@Slf4j +//@Component +//public class DemoJobHandler { +// +// @XxlJob(value = "demoHandler") +// public ReturnT execute(String param) throws Exception { +// System.out.println("调度任务Demo执行"); +// XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); +// +//// for (int i = 0; i < 5; i++) { +//// XxlJobLogger.log("beat at:" + i); +//// TimeUnit.SECONDS.sleep(2); +//// } +// return SUCCESS; +// } +// +//} diff --git a/casic-job/src/main/java/com/casic/missiles/job/handler/OfflineJobHandler.java b/casic-job/src/main/java/com/casic/missiles/job/handler/OfflineJobHandler.java index 1e6708f..276c5db 100644 --- a/casic-job/src/main/java/com/casic/missiles/job/handler/OfflineJobHandler.java +++ b/casic-job/src/main/java/com/casic/missiles/job/handler/OfflineJobHandler.java @@ -1,26 +1,26 @@ -package com.casic.missiles.job.handler; - -import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; -import com.xxl.job.core.context.XxlJobHelper; -import com.xxl.job.core.handler.annotation.XxlJob; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -@RequiredArgsConstructor -public class OfflineJobHandler { - - private final IAlarmRecordsService iAlarmRecordsService; - - /** - * 离线判断处理 - */ - @XxlJob("offlineJobHandler") - public void offlineJobHandler() { - XxlJobHelper.log("check offline"); - iAlarmRecordsService.processOffline(); - } - -} +//package com.casic.missiles.job.handler; +// +//import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +//import com.xxl.job.core.context.XxlJobHelper; +//import com.xxl.job.core.handler.annotation.XxlJob; +//import lombok.RequiredArgsConstructor; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.stereotype.Component; +// +//@Slf4j +//@Component +//@RequiredArgsConstructor +//public class OfflineJobHandler { +// +// private final IAlarmRecordsService iAlarmRecordsService; +// +// /** +// * 离线判断处理 +// */ +// @XxlJob("offlineJobHandler") +// public void offlineJobHandler() { +// XxlJobHelper.log("check offline"); +// iAlarmRecordsService.processOffline(); +// } +// +//} diff --git a/casic-job/src/main/java/com/casic/missiles/job/handler/SuspendExpireJobHandler.java b/casic-job/src/main/java/com/casic/missiles/job/handler/SuspendExpireJobHandler.java index 5ce8fc2..3610add 100644 --- a/casic-job/src/main/java/com/casic/missiles/job/handler/SuspendExpireJobHandler.java +++ b/casic-job/src/main/java/com/casic/missiles/job/handler/SuspendExpireJobHandler.java @@ -1,65 +1,65 @@ -package com.casic.missiles.job.handler; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.casic.missiles.modular.alarm.entity.AlarmRecords; -import com.casic.missiles.modular.alarm.entity.SuspendLog; -import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; -import com.casic.missiles.modular.alarm.service.IApprovalLogService; -import com.casic.missiles.modular.alarm.service.ISuspendLogService; -import com.xxl.job.core.context.XxlJobHelper; -import com.xxl.job.core.handler.annotation.XxlJob; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.time.LocalDate; -import java.time.ZoneId; -import java.time.ZonedDateTime; -import java.util.Date; -import java.util.List; -import java.util.stream.Collectors; - -@Slf4j -@Component -@RequiredArgsConstructor -public class SuspendExpireJobHandler { - - private final ISuspendLogService iSuspendLogService; - private final IAlarmRecordsService iAlarmRecordsService; - private final IApprovalLogService iApprovalLogService; - - /** - * 挂起时间到期处理 - */ - @XxlJob("suspendExpireJobHandler") - public void suspendExpireJobHandler() { - XxlJobHelper.log("check suspend expire"); -// Date today = getTodayStart(); - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.lt("EXPIRE_TIME", new Date()); - queryWrapper.eq("VALID", "1"); - List suspendLogList = iSuspendLogService.list(queryWrapper); - if (suspendLogList != null && suspendLogList.size() > 0) { - suspendLogList.forEach(suspendLog -> { - suspendLog.setValid("0"); - }); - iSuspendLogService.updateBatchById(suspendLogList); - //更新最新状态 - List alarmIds = suspendLogList.stream().map(SuspendLog::getAlarmId).collect(Collectors.toList()); - List alarmRecordsList = iAlarmRecordsService.changeProcessStatus(alarmIds); - //添加流转日志 - iApprovalLogService.saveSuspendLogs(alarmRecordsList); - } - } - - private Date getTodayStart() { - // 获取当天日期 - LocalDate today = LocalDate.now(); - // 当天日期与午夜时间的组合 - ZonedDateTime todayStart = today.atStartOfDay(ZoneId.systemDefault()); - - // 转换为java.util.Date - return Date.from(todayStart.toInstant()); - } - -} +//package com.casic.missiles.job.handler; +// +//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +//import com.casic.missiles.modular.alarm.entity.AlarmRecords; +//import com.casic.missiles.modular.alarm.entity.SuspendLog; +//import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +//import com.casic.missiles.modular.alarm.service.IApprovalLogService; +//import com.casic.missiles.modular.alarm.service.ISuspendLogService; +//import com.xxl.job.core.context.XxlJobHelper; +//import com.xxl.job.core.handler.annotation.XxlJob; +//import lombok.RequiredArgsConstructor; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.stereotype.Component; +// +//import java.time.LocalDate; +//import java.time.ZoneId; +//import java.time.ZonedDateTime; +//import java.util.Date; +//import java.util.List; +//import java.util.stream.Collectors; +// +//@Slf4j +//@Component +//@RequiredArgsConstructor +//public class SuspendExpireJobHandler { +// +// private final ISuspendLogService iSuspendLogService; +// private final IAlarmRecordsService iAlarmRecordsService; +// private final IApprovalLogService iApprovalLogService; +// +// /** +// * 挂起时间到期处理 +// */ +// @XxlJob("suspendExpireJobHandler") +// public void suspendExpireJobHandler() { +// XxlJobHelper.log("check suspend expire"); +//// Date today = getTodayStart(); +// QueryWrapper queryWrapper = new QueryWrapper<>(); +// queryWrapper.lt("EXPIRE_TIME", new Date()); +// queryWrapper.eq("VALID", "1"); +// List suspendLogList = iSuspendLogService.list(queryWrapper); +// if (suspendLogList != null && suspendLogList.size() > 0) { +// suspendLogList.forEach(suspendLog -> { +// suspendLog.setValid("0"); +// }); +// iSuspendLogService.updateBatchById(suspendLogList); +// //更新最新状态 +// List alarmIds = suspendLogList.stream().map(SuspendLog::getAlarmId).collect(Collectors.toList()); +// List alarmRecordsList = iAlarmRecordsService.changeProcessStatus(alarmIds); +// //添加流转日志 +// iApprovalLogService.saveSuspendLogs(alarmRecordsList); +// } +// } +// +// private Date getTodayStart() { +// // 获取当天日期 +// LocalDate today = LocalDate.now(); +// // 当天日期与午夜时间的组合 +// ZonedDateTime todayStart = today.atStartOfDay(ZoneId.systemDefault()); +// +// // 转换为java.util.Date +// return Date.from(todayStart.toInstant()); +// } +// +//} diff --git a/casic-public/src/main/java/com/casic/missiles/enums/AlarmEnum.java b/casic-public/src/main/java/com/casic/missiles/enums/AlarmEnum.java new file mode 100644 index 0000000..e73e469 --- /dev/null +++ b/casic-public/src/main/java/com/casic/missiles/enums/AlarmEnum.java @@ -0,0 +1,46 @@ +package com.casic.missiles.enums; + + +public enum AlarmEnum { + + + Sloping("Sloping", "倾斜报警"), + Destroy("Destroy", "破坏报警"), + DiscL("DiscL", "左侧断线报警"), + Leak("Leak", "泄露报警"), + DiscR("DiscR", "右侧断线报警"), + VibL("VibL", "左侧振动报警"), + VibR("VibR", "右侧振动报警"); +// VibL("自管", "1"), +// VibL("自管", "1"), +// VibL("自管", "1"); + + private String code; + private String value; + + AlarmEnum(String code, String value) { + this.code = code; + this.value = value; + } + + + public static String getValue(String code){ + for(AlarmEnum approvalStatusEnum :values()){ + if(approvalStatusEnum.code.equals(code)){ + return approvalStatusEnum.value; + } + } + return ""; + } + + + + public String getCode() { + return code; + } + + public String getValue() { + return value; + } + +} diff --git a/casic-public/src/main/java/com/casic/missiles/enums/DeviceDataEnum.java b/casic-public/src/main/java/com/casic/missiles/enums/DeviceDataEnum.java index 3fc6f08..13f5b23 100644 --- a/casic-public/src/main/java/com/casic/missiles/enums/DeviceDataEnum.java +++ b/casic-public/src/main/java/com/casic/missiles/enums/DeviceDataEnum.java @@ -4,11 +4,12 @@ public enum DeviceDataEnum { - DATA_GAS("燃气智能监测终端", "data_gas", "devcode,uptime,logtime,well_code", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime"), - DATA_GAS_LIQUID("燃气智能监测终端(一体化)", "data_gasliquid_gas", "devcode,uptime,logtime,well_code", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime"), - DATA_TUBE_OTHER("管网哨兵", "data_tube_other", "devcode,uptime,logtime,well_code", "DEVCODE,GASVAL, VBAT,SIN,RSRP,SINR,UPTIME,LOGTIME", "logtime"), - DATA_MONITOR_PIPE_OTHER("智能警示桩", "data_monitor_pipe_other", "devcode,uptime,logtime,well_number", "DEVCODE,TEMPERATURE,HUMIDITY,VBAT,PIPE_INCLINE_ALARM,PIPE_BREAK_ALARM,GAS_ALARM,LEFT_OFF_LINE_ALARM,LEFT_VIBRATE_ALARM,RIGHT_OFF_LINE_ALARM,RIGHT_VIBRATE_ALARM,PICTURE_ALARM,LEFT_GAS,RIGHT_GAS,LEFT_LENGTH,RIGHT_LENGTH,LOGTIME,UPTIME ", "logtime"), - DATA_PAN_GAS("场站监测云台", "data_pan_gas", "DEVICE_CODE,,logtime,LEDGER_CODE", "ID,LEDGER_NUMBER,DEVICE_CODE,CONCENTRATION,LOGTIME,DIRCETION,PITCH", "LOGTIME"); + DATA_GAS("燃气智能监测终端", "data_gas", "devcode,uptime,logtime,well_code", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime","cell,uptime"), + DATA_GAS_LIQUID("燃气智能监测终端(一体化)", "data_gasliquid_gas", "devcode,uptime,logtime,well_code", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime","cell,uptime"), + DATA_TUBE_OTHER("管网哨兵", "data_tube_other", "devcode,uptime,logtime,well_code", "DEVCODE,GASVAL, VBAT,SIN,RSRP,SINR,UPTIME,LOGTIME,sig,temp,SS_STATE as ssState", "logtime","VBAT,UPTIME"), + DATA_MONITOR_PIPE_OTHER("智能警示桩", "data_monitor_pipe_other", "devcode,uptime,logtime,well_number", "DEVCODE,TEMPERATURE,HUMIDITY,VBAT,PIPE_INCLINE_ALARM,PIPE_BREAK_ALARM,GAS_ALARM,LEFT_OFF_LINE_ALARM,LEFT_VIBRATE_ALARM,RIGHT_OFF_LINE_ALARM,RIGHT_VIBRATE_ALARM,PICTURE_ALARM,LEFT_GAS,RIGHT_GAS,LEFT_LENGTH,RIGHT_LENGTH,LOGTIME,UPTIME ", "logtime","VBAT as cell,uptime"), + DATA_PAN_GAS("场站监测云台", "data_pan_gas", "DEVICE_CODE,,logtime,LEDGER_CODE", "ID,LEDGER_NUMBER,DEVICE_CODE,CONCENTRATION,LOGTIME,DIRCETION,PITCH", "LOGTIME","CONCENTRATION as cell ,LOGTIME as uptime"), + DATA_GAS_OTHER("管网哨兵(一体化)", "data_gas_other", "devcode,uptime,logtime,well_code", "DEVCODE,GASVAL, VBAT,SIN,RSRP,SINR,UPTIME,LOGTIME,sig,temp,SS_STATE as ssState", "logtime","VBAT,UPTIME"); public static DeviceDataEnum typeOf(String type) { DeviceDataEnum deviceDataEnum = null; @@ -28,6 +29,9 @@ case "燃气智能监测终端(一体化)": deviceDataEnum = DATA_GAS_LIQUID; break; + case "管网哨兵(一体化)": + deviceDataEnum = DATA_GAS_OTHER; + break; default: deviceDataEnum = null; } @@ -39,13 +43,15 @@ String tableColumns; String orderColumn; String type; + String cellColumn; - DeviceDataEnum(String type, String tableName, String queryColumns, String tableColumns, String orderColumn) { + DeviceDataEnum(String type, String tableName, String queryColumns, String tableColumns, String orderColumn,String cellColumn) { this.type = type; this.queryColumns = queryColumns; this.tableName = tableName; this.tableColumns = tableColumns; this.orderColumn = orderColumn; + this.cellColumn = cellColumn; ; } @@ -98,4 +104,12 @@ public void setType(String type) { this.type = type; } + + public String getCellColumn() { + return cellColumn; + } + + public void setCellColumn(String cellColumn) { + this.cellColumn = cellColumn; + } } diff --git a/casic-public/src/main/java/com/casic/missiles/enums/DeviceTypeEnum.java b/casic-public/src/main/java/com/casic/missiles/enums/DeviceTypeEnum.java index b372b6b..11cd89a 100644 --- a/casic-public/src/main/java/com/casic/missiles/enums/DeviceTypeEnum.java +++ b/casic-public/src/main/java/com/casic/missiles/enums/DeviceTypeEnum.java @@ -20,7 +20,8 @@ KAD("点型可燃气体探测器", 16,"data_kad"), PANTILT("激光甲烷云台", 17,"data_pan_gas"), PRESSURE("压力监测终端", 18,"data_pressure"), - GasDector("点型可燃气体探测器", 19,"data_gas_dector"); + GasDector("点型可燃气体探测器", 19,"data_gas_dector"), + LGGasOther("管网哨兵(一体化)", 20,"data_gas_other"); // 成员变量 private String name; diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java new file mode 100644 index 0000000..fc881a1 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.data.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 外协管盯 前端控制器 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RestController +@RequestMapping("/system/dataGasOther") +public class DataGasOtherController { + +} + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java new file mode 100644 index 0000000..b5f3627 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.data.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 外协管盯 Mapper 接口 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Mapper +public interface DataGasOtherMapper extends BaseMapper { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml new file mode 100644 index 0000000..8ce1455 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID, DEVCODE, WELL_CODE, WELL_NUMBER, GASVAL, VBAT, BATSTA, SIN, RSRP, SINR, UPTIME, LOGTIME, SIG, TEMP, SS_STATE + + + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java new file mode 100644 index 0000000..53972ba --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java @@ -0,0 +1,94 @@ +package com.casic.missiles.modular.data.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 外协管盯 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Builder +@Data +@TableName("data_gas_other") +@ApiModel(value = "DataGasOther对象", description = "外协管盯") +public class DataGasOther implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId("ID") + private Long id; + + @ApiModelProperty("设备编号") + @TableField("DEVCODE") + private String devcode; + + @ApiModelProperty("点位编号") + @TableField("WELL_CODE") + private String wellCode; + + @ApiModelProperty("位号") + @TableField("WELL_NUMBER") + private String wellNumber; + + @ApiModelProperty("气体浓度采样值") + @TableField("GASVAL") + private String gasval; + + @ApiModelProperty("设备电池电压值(毫伏)") + @TableField("VBAT") + private String vbat; + + @ApiModelProperty("电池状态0 正常、 1 低电告警、2 关机") + @TableField("BATSTA") + private String batsta; + + @ApiModelProperty("接收信号强度等级") + @TableField("SIN") + private String sin; + + @ApiModelProperty("接收信号参考质量 服务小 区的 RSRP 值") + @TableField("RSRP") + private String rsrp; + + @ApiModelProperty("信噪比") + @TableField("SINR") + private String sinr; + + @ApiModelProperty("采集时间") + @TableField("UPTIME") + private Date uptime; + + @ApiModelProperty("上传时间") + @TableField("LOGTIME") + private Date logtime; + + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态,0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java index 86077b8..f4d4417 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java @@ -76,4 +76,17 @@ private Date logtime; + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态:0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java new file mode 100644 index 0000000..842ca0b --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.data.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.data.entity.DataGasOther; + +/** + *

+ * 外协管盯 服务类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +public interface IDataGasOtherService extends IService { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java new file mode 100644 index 0000000..4c660e9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java @@ -0,0 +1,226 @@ +package com.casic.missiles.modular.data.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.enums.DeviceTypeEnum; +import com.casic.missiles.enums.DictEnum; +import com.casic.missiles.modular.alarm.dto.AlarmDeviceRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.AlarmRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.BusAlarmLedgerDTO; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.data.dao.DataGasMapper; +import com.casic.missiles.modular.data.dao.DataGasOtherMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import com.casic.missiles.modular.data.entity.DataTubeOther; +import com.casic.missiles.modular.data.service.IDataAbstractService; +import com.casic.missiles.modular.data.service.IDataGasOtherService; +import com.casic.missiles.modular.data.service.ITrackLogService; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Optional; + +/** + *

+ * 外协管盯 服务实现类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RequiredArgsConstructor +@Service +public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { + + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + private final DataGasMapper dataGasMapper; + private final IAlarmRecordsService alarmRecordsService; + private final IAlarmRuleService alarmRuleService; + private final ITrackLogService iTrackLogService; + private final IBusDeviceService busDeviceService; + + @Override + public void process(String dataContent) { + + //解析数据+根据业务处理存储数据 + JSONObject json = JSONObject.parseObject(dataContent); + String devCode = json.get("devCode").toString(); + JSONObject jsonObject = json.getJSONObject("mBody"); + if (mType[0].equals(json.get("mType")) || mType[3].equals(json.get("mType"))) {//存储上报数据 + this.processNormalData(jsonObject, devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + this.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.TubeOther.name().equals(json.get("devType"))) { + if ("TubeOtherConfigSuccess".equals(jsonObject.get("bType"))) { +// deviceConfigManager.updateStatus(devCode); + } + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } else if (mType[4].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); +// imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; + try { + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); + } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + } + } + + @Transactional + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.getString("cell"); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = jsonObject.getJSONArray("datas"); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + String bfcf = busDeviceService.getBfcf(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).getString("gasval"); + String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); + String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); + String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataGasOther.builder() + .wellCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .wellNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .devcode(devCode) +// .cell(cell) + .gasval(gas) + .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime))) + .logtime(new Date()) + .vbat(vbat) + .batsta(batsta) + .rsrp(rsrp) + .sin(pci) + .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) + .build());//存储采集数据 + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) continue; + + //3.清除设备告警 + alarmRecordsService.cancelDeviceAlarm(devCode); + //4.存报警 + //若没绑定井,则不产生报警 + boolean alarmFlag = false; + if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { + //获取报警规则 + List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); + for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { + if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && + Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { + alarmFlag = true; + //写入报警 + //1、判断报警是否已存在 + if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.TubeOther.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); + //7.更新管线状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java index d248540..b33a1ee 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java @@ -91,7 +91,6 @@ } - public List getBusAlarmLedgerList(String devCode) { return this.dataGasMapper.getListByDevCode(devCode); } @@ -113,6 +112,13 @@ for (int i = 0; i < jsonArray.size(); i++) { try { String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) .findFirst(); @@ -175,18 +181,18 @@ alarmRecordsService.cancelDeviceAlarm(devCode); //4.存报警 //若没绑定井,则不产生报警 - boolean alarmFlag = false; + boolean alarmFlag = false; if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { //获取报警规则 List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { - alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); } break; } @@ -197,7 +203,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及设备状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新监测井状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java index e848fce..6297093 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java @@ -84,42 +84,78 @@ } - @Transactional - public void processAlarmData(JSONObject jsonObject, String devCode) { - JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + public void processEventAlarm(String devCode, String eventTypeCode, String logTime, String eventValue) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - //获取报警事件 - List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - - List busWellDTOList = dataGasMapper.getListByDevCode(devCode); - //若没绑定井,则不产生报警 - if (busWellDTOList != null && busWellDTOList.size() > 0) { - - for (int i = 0; i < jsonArray.size(); i++) { + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + //特殊处理消警 + if ("0".equals(eventValue)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, eventTypeCode); + } + return; } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> eventTypeCode.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 - if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + if (!alarmDeviceRuleResponseDTO.isPresent()) return; //1.查询是否已存在该类报警 - if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) return; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); - - + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + } + } + } + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + try { + String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmEventCode)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } } } } @@ -169,7 +205,76 @@ .rightVibrateAlarm(VibR) .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(uptime))) .logtime(new Date()) - .build());//存储采集数据 + .build()); + + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + ruleResponseDTOList.forEach(ruleResponseDTO -> { + + if ("Sloping".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Sloping)&&(!alarmRecordsService.isWatchAlarms(devCode,"Sloping"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Sloping", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Sloping)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Sloping"); + + } + } + if ("Destroy".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Destroy)&&(!alarmRecordsService.isWatchAlarms(devCode,"Destroy"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Destroy", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Destroy)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Destroy"); + + } + } + if ("Leak".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Leak)&&(!alarmRecordsService.isWatchAlarms(devCode,"Leak"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Leak", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Leak)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Leak"); + + } + } + if ("DiscL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscL)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscL"); + + } + } + if ("DiscR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscR)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscR"); + } + } + + if ("VibL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibL)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibL"); + } + } + if ("VibR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibR)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibR"); + } + } + }); + +// //处理报警事件 +// processEventAlarm(devCode,"Sloping",uptime,Sloping); +// processEventAlarm(devCode,"Destroy",uptime,Destroy); +// processEventAlarm(devCode,"Leak",uptime,Leak); +// processEventAlarm(devCode,"DiscL",uptime,DiscL); +// processEventAlarm(devCode,"DiscR",uptime,DiscR); +// processEventAlarm(devCode,"VibL",uptime,VibL); +// processEventAlarm(devCode,"VibR",uptime,VibR); + //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -197,7 +302,7 @@ if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && gas >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), gas)) { @@ -213,7 +318,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R,alarmFlag?"燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R, alarmFlag ? "燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java index f913775..895d201 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java @@ -89,6 +89,7 @@ String bfcf = busDeviceService.getBfcf(devCode); if (DictEnum.BF_ON.equals(bfcf)) { JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); //获取报警事件 List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); List busWellDTOList = dataGasMapper.getListByDevCode(devCode); @@ -96,25 +97,43 @@ if (busWellDTOList != null && busWellDTOList.size() > 0) { for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 if (!alarmDeviceRuleResponseDTO.isPresent()) continue; //1.查询是否已存在该类报警 if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { @@ -141,6 +160,9 @@ String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); gas = String.format("%.2f", Double.valueOf(gas)); //1.存数据 save(DataTubeOther.builder() @@ -156,6 +178,9 @@ .rsrp(rsrp) .sin(pci) .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) .build());//存储采集数据 //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -186,7 +211,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 98e736b..2288075 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -216,5 +216,15 @@ public ReturnDTO syncDeviceStatus() { return ReturnUtil.success(iBusDeviceService.syncDeviceStatus()); } + + @ApiOperation("根据闸井id获取设备信息") + @PostMapping("/getListByWellId") + @ResponseBody + public ReturnDTO getListByWellId(@RequestBody IdDTO idDTO) { + Assert.isFalse(ObjectUtil.isEmpty(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iBusDeviceService.getListByWellId(idDTO.getId())); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java index 72a2d84..d6d9743 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java @@ -85,6 +85,7 @@ return ReturnUtil.success(iBusLedgerService.detail(idDTO.getId())); } + /** * 同步三级部门 * diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java index 9e412d2..4316b56 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java @@ -1,22 +1,33 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.response.ErrorResponseData; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; +import com.casic.missiles.modular.device.dto.BusPositionImportDTO; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.ReturnUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataAccessException; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; /** @@ -40,8 +51,44 @@ @PostMapping("/addPosition") @ResponseBody public ReturnDTO addPosition(@RequestBody BusLedgerPipe busLedgerPipe) { + + List busLedgerPipeList = iBusLedgerPipeService.getListByNumber(busLedgerPipe.getTagNumber()); + if(busLedgerPipeList!=null&&busLedgerPipeList.size()>0){ + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE,"安装位号已存!!!"); + } + Long id =IdUtil.getSnowflake(1,2).nextId(); + busLedgerPipe.setId(id); iBusLedgerPipeService.save(busLedgerPipe); - return ReturnUtil.success(busLedgerPipe.getId()); + return ReturnUtil.success(id); + } + + @ApiOperation("批量导入") + @RequestMapping(value = "/batchImport", method = RequestMethod.POST) + @ResponseBody + public Object batchImport(@RequestParam("file") MultipartFile file) { + List results = new ArrayList<>(); + try { + results = this.importExcel(BusPositionImportDTO.class, file, null, null); + List list = iBusLedgerPipeService.addPositionBatch(results); + if (!CollectionUtil.isEmpty(list)) { + //获取校验报错信息 + return new ErrorResponseData(list.get(0)); + } + } catch (Exception e) { + return catchMybatisPlusException(e, "导入位置信息失败"); + } + return ResponseData.success(); + } + + private ResponseData catchMybatisPlusException(Exception e, String errorMsg) { + if (e instanceof DataAccessException) { + DataAccessException mybatisPlusException = (DataAccessException) e; + String message = mybatisPlusException.getRootCause().getMessage(); + if (message.contains("Duplicate entry '")) { + return new ErrorResponseData("安装位号重复:" + message.replaceAll("Duplicate entry '", "").replaceAll("' for key 'DEVCODE'", "")); + } + } + return new ErrorResponseData(errorMsg); } @ApiOperation("编辑点位") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java index d1e08a8..d938876 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java @@ -51,6 +51,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getOperatorName()), "CREATE_USER", request.getOperatorName()); queryWrapper.ge(ObjectUtil.isNotEmpty(request.getStartTime()), "START_TIME", request.getStartTime()); queryWrapper.le(ObjectUtil.isNotEmpty(request.getEndTime()), "END_TIME", request.getEndTime()); + queryWrapper.orderByDesc("START_TIME"); return ReturnUtil.success(super.packForBT(iSyncLogService.page(page, queryWrapper))); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java index 5ee5291..23ddee9 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java @@ -73,4 +73,12 @@ " where bd.DEVCODE= #{devcode} and bd.VALID=1 " + ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD asc") List getDeviceTypeRule(@Param("devcode") String devcode); + + + @Select("SELECT bd.* from bus_device bd " + + "left JOIN bus_device_ledger bl on bd.id= bl.DEVICE_ID and bl.VALID=1 " + + "LEFT JOIN bus_ledger_all_view bv on bv.id= bl.LEDGER_ID and bv.type= bl.TYPE and bv.VALID=1 " + + "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") + List getListByWellId(@Param("wellId") Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java index e1d16c4..a4c3f7a 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java @@ -37,7 +37,7 @@ @Select("SELECT b.ORG_ID,b.ORG_CODE,b.ORG_NAME,b.PARENT_ID FROM `bus_sync_org_relation` b WHERE b.DEL_FLAG =0 and b.PARENT_ID = #{syncId} ") List synDept(@Param("syncId") String syncId); - @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view ") + @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view where VALID=1") List getBusLedgers(); @Select("SELECT DEVCODE FROM `bus_device` where VALID>0 ") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml index 99ef10b..c6d1fff 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml @@ -29,6 +29,7 @@ bp.DEVICE_MODEL as deviceModel, bt.TYPE_NAME as typeName, + bp.DATA_SERVICE as deviceCategory, bm.`NAME` as manufactureName, bl.tagNumber as tagNumber, bl.id as ledgerId, @@ -81,6 +82,10 @@ and bd.LOGTIME #{request.logTime2} + + and bp.DATA_SERVICE =#{request.deviceCategory} + + ORDER BY bd.INSTALL_DATE DESC diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml index bdadb6a..d3f4684 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml @@ -40,7 +40,7 @@ `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + AND bdl.VALID = 1 JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -99,8 +99,8 @@ bm.`NAME` as manufactureName FROM `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE - LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID and bdl.type=blp.type + AND bdl.VALID = 1 LEFT JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -117,7 +117,9 @@ WITH station_temp as(SELECT bl.ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID FROM `bus_ledger` bl where bl.VALID=1 and bl.TYPE =2) - select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME from station_temp bl + select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME,bd.DEVCODE from station_temp bl left join bus_device_ledger bdl on bdl.LEDGER_ID = bl.ID and bdl.TYPE =2 and bdl.valid=1 left join bus_device bd on bd.id= bdl.DEVICE_ID and bd.VALID=1 order by bl.ID diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml index 7b92b04..1d97c64 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml @@ -184,7 +184,7 @@ WHERE EQ_LOCNO like 'N%' and - EQ_CATEGORY in (1,3) + EQ_CATEGORY in (1,2,3,5) diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java index 859cf08..143b42d 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java @@ -23,6 +23,9 @@ @ApiModelProperty("设备类型id") private Long typeId; + @ApiModelProperty("产品名称") + private String productName; + @ApiModelProperty("指令集合") private List commandConfigList; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java index 646610b..2cb5894 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("最新上传结束时间") private String logTime2; + + @ApiModelProperty("设备类别(0:自有设备,1:数据服务)") + private String deviceCategory; } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java index 8c95537..28b30fa 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java @@ -44,6 +44,9 @@ @ExcelProperty("关联管线") private String pipeCode; + @ExcelProperty("监测类型") + private String monitorType; + private String watchObject; private Long deviceType; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java index 0980c34..ac5daf0 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java @@ -24,4 +24,7 @@ @ApiModelProperty("详细位置") private String position; + @ApiModelProperty("1:其他,3:管线") + private String type; + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java new file mode 100644 index 0000000..bce7ebd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.device.dto; + + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class BusPositionImportDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + + @ExcelProperty("管线编号") + private String pipeCode; + + @ExcelProperty("安装位号") + private String tagNumber; + + @ExcelProperty("经度(高德)") + private String lngGaode; + + @ExcelProperty("纬度(高德)") + private String latGaode; + + @ExcelProperty("详细位置") + private String position; + + @ExcelProperty("管理单位") + private Long deptid; + + @ExcelProperty("位置类别") + private String type; + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java index 58faa0e..d72ae78 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java @@ -16,13 +16,13 @@ private String deviceId; //移动命令:left right up down left_up left_down right_up right_down GOTO_PRESET - @ApiModelProperty("移动命令") + @ApiModelProperty("移动命令(left right up down left_up left_down right_up right_down)") private String command; - @ApiModelProperty("速度") + @ApiModelProperty("速度,一般传100") private String speed; - @ApiModelProperty("启停命令") + @ApiModelProperty("启停命令(0:开始,1:结束)") private String cameraAction; @ApiModelProperty("预置点编号") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java index b4ec73c..5a3d0b0 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java @@ -66,7 +66,7 @@ private String powerSupplyMode; - @ApiModelProperty("是否结束数据服务") + @ApiModelProperty("是否结束数据服务(1:是,0:否)") @TableField("DATA_SERVICE") private String dataService; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java index 1184995..407e3c1 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java @@ -193,10 +193,14 @@ @TableField(exist = false) private String bfztName; + @ApiModelProperty("设备类别(0:自有设备,1:数据服务)") + @TableField(exist = false) + private String deviceCategory; + public BusDevice() { } - public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds) { + public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds, String monitorType) { this.devcode = devcode; this.deviceType = deviceType; this.productId = productId; @@ -204,6 +208,7 @@ this.installDate = installDate; this.watchObject = watchObject; this.ledgerIds = ledgerIds; + this.monitorType = monitorType; } public static List convertDeviceList(List dtoList) { @@ -227,7 +232,8 @@ deviceImportDTO.getValid(), deviceImportDTO.getInstallDate(), deviceImportDTO.getWatchObject(), - deviceImportDTO.getLedgerIds())); + deviceImportDTO.getLedgerIds(), + deviceImportDTO.getMonitorType())); }); return busDeviceList; } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java index 12b52de..1ac8455 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java @@ -1,16 +1,20 @@ package com.casic.missiles.modular.device.entity; +import cn.hutool.core.util.IdUtil; 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 com.casic.missiles.modular.device.dto.BusPositionImportDTO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import java.io.Serializable; +import java.util.ArrayList; import java.util.Date; +import java.util.List; /** *

@@ -29,7 +33,7 @@ private static final long serialVersionUID = 1L; @ApiModelProperty("主键") - @TableId(value = "ID", type = IdType.AUTO) +// @TableId(value = "ID", type = IdType.AUTO) private Long id; @ApiModelProperty("编号") @@ -60,6 +64,10 @@ @TableField("DEPTID") private Long deptid; + @ApiModelProperty("类别(1:其他,3:管线)") + @TableField("`TYPE`") + private String type; + @ApiModelProperty("责任部门") @TableField("RESPONSIBLE_DEPT") private Long responsibleDept; @@ -110,9 +118,10 @@ public BusLedgerPipe() { } - public BusLedgerPipe(String pipeCode, String ledgerName, String tagNumber, + public BusLedgerPipe(Long id,String pipeCode, String ledgerName, String tagNumber, String lngGaode, String latGaode, String position, - Long deptid, String devcode) { + Long deptid, String devcode, String type) { + this.id=id; this.pipeCode = pipeCode; this.ledgerName = ledgerName; this.tagNumber = tagNumber; @@ -121,5 +130,26 @@ this.position = position; this.deptid = deptid; this.devcode = devcode; + this.type = type; } + + public static List convertDeviceList(List dtoList) { + + + List busDeviceList = new ArrayList<>(); + dtoList.forEach(positionImportDTO -> { + + busDeviceList.add(new BusLedgerPipe(IdUtil.getSnowflake(1,2).nextId(),positionImportDTO.getPipeCode(), + positionImportDTO.getTagNumber(), + positionImportDTO.getTagNumber(), + positionImportDTO.getLngGaode(), + positionImportDTO.getLatGaode(), + positionImportDTO.getPosition(), + positionImportDTO.getDeptid(), + "", + positionImportDTO.getType())); + }); + return busDeviceList; + } + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java index aaaa409..63c0576 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java @@ -52,4 +52,8 @@ List getDeviceRule(String devcode); + List getDevicesByCodes(List devcodes); + + List getListByWellId(Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java index 14f6a93..8692383 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java @@ -2,11 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; -import com.casic.missiles.core.datascope.DataScope; -import com.casic.missiles.modular.device.dto.BusLedgerPipeMonitorRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeResponseDTO; -import com.casic.missiles.modular.device.dto.MonitorDataRequestDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import java.util.List; @@ -26,17 +22,21 @@ Page monitorPipePageList(Page page, BusLedgerPipeMonitorRequestDTO request); - BusLedgerPipeResponseDTO detail(Long id,String devcode); + BusLedgerPipeResponseDTO detail(Long id, String devcode); - List> watchDataByPipe(MonitorDataRequestDTO requestDTO); + List> watchDataByPipe(MonitorDataRequestDTO requestDTO); - List> pipeList(); + List> pipeList(); - List> deviceList(); + List> deviceList(); BusLedgerPipe saveBusLedgerPipe(BusLedgerPipe busLedgerPipe); Boolean updateMonitorStatus(List tagNumbers); + List addPositionBatch(List results); + + List getListByNumber(String tagNumber); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java index 66ed812..ad72230 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java @@ -12,9 +12,12 @@ import com.casic.missiles.modular.device.dto.BusConfigOtherDTO; import com.casic.missiles.modular.device.dto.BusConfigRequestDTO; import com.casic.missiles.modular.device.entity.BusConfig; +import com.casic.missiles.modular.device.entity.BusDevice; import com.casic.missiles.modular.device.service.IBusConfigService; +import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.HttpClientUtils; import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -22,6 +25,9 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.LinkedBlockingDeque; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; /** *

@@ -36,6 +42,11 @@ public class BusConfigServiceImpl extends ServiceImpl implements IBusConfigService { private final AbstractPermissionContext abstractPermissionContext; + private final IBusDeviceService iBusDeviceService; + private final ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(3, 6, 60, TimeUnit.SECONDS, new LinkedBlockingDeque<>(10)); + + @Value("${casic.brSendConfigUrl}") + private String brSendConfigUrl; @Transactional @Override @@ -105,6 +116,42 @@ .operator(user != null ? user.getId() : null) .operatorName(user != null ? user.getName() : "").build()); }); + + + threadPoolExecutor.execute( + () -> { + //发送第三方下发: + if (busConfigOtherDTO.getProductName().contains("管网哨兵")) { + List busDeviceList = iBusDeviceService.getDevicesByCodes(devcodes); + for (BusDevice busDevice : busDeviceList) { + if (ObjectUtil.isAllNotEmpty(busDevice.getNbProductId(), busDevice.getNbDeviceId())) { + Map commandMap = new HashMap<>(); + commandMap.put("productId", busDevice.getNbProductId()); + commandMap.put("devCode", busDevice.getDevcode()); + commandMap.put("deviceId", busDevice.getNbDeviceId()); + commandMap.put("cmdList", busConfigOtherDTO.getCommandConfigList()); + HttpClientUtils.post(brSendConfigUrl+"/tube/config/send", JSON.toJSONString(commandMap)); + } + } + } else if (busConfigOtherDTO.getProductName().contains("智能警示桩")) { + + List busDeviceList = iBusDeviceService.getDevicesByCodes(devcodes); + for (BusDevice busDevice : busDeviceList) { + if (ObjectUtil.isAllNotEmpty(busDevice.getNbProductId(), busDevice.getNbDeviceId())) { + Map commandMap = new HashMap<>(); + commandMap.put("productId", busDevice.getNbProductId()); + commandMap.put("devCode", busDevice.getDevcode()); + commandMap.put("deviceId", busDevice.getNbDeviceId()); + commandMap.put("cmdList", busConfigOtherDTO.getCommandConfigList()); + HttpClientUtils.post(brSendConfigUrl+"/sentinel/config/send", JSON.toJSONString(commandMap)); + } + } + + } + } + ); + + return this.saveBatch(busConfigs); // List> mapList = new ArrayList<>(); // Map commandMap = new HashMap<>(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java index 60d15e5..bae6902 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java @@ -3,6 +3,7 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -80,6 +81,7 @@ @Override public Page listPage(Page page, BusDeviceDTO request) { + page.setOptimizeCountSql(false); Page busDevicePage = this.baseMapper.pageList(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List busDeviceList = busDevicePage.getRecords(); busDeviceList.forEach(busDevice -> { @@ -227,7 +229,7 @@ if (deviceDataEnum.getTableColumns().contains("cell")) { String[] queryColumns = deviceDataEnum.getQueryColumns().split(",", 4); resultMap = this.baseMapper.cellAnalysis(deviceDataEnum.getTableName(), - "cell,uptime", + deviceDataEnum.getCellColumn(), queryColumns[0], queryColumns[1], deviceDataEnum.getOrderColumn(), @@ -265,14 +267,13 @@ } else { List busDeviceLedgers = busDeviceLedgerService.getListByDeviceId(busDevice.getId()); //没绑定关系,先绑定 - if (ObjectUtil.isNotEmpty(busDeviceLedgers)) { + if (busDeviceLedgers == null || busDeviceLedgers.size() < 1) { busDeviceLedgerService.saveDeviceLedger(busDevice.getId(), busDevice.getLedgerIds(), busDevice.getWatchObject()); } else { //已绑定,判断是否位置变了 List ledgerIdsPre = busDeviceLedgers.stream().map(BusDeviceLedger::getLedgerId).collect(Collectors.toList()); if (ledgerIds.containsAll(ledgerIdsPre) && ledgerIdsPre.containsAll(ledgerIds)) { } else { - busDeviceLedgerService.deleteDeviceLedgers(Arrays.asList(busDevice.getId())); busDeviceLedgerService.saveDeviceLedger(busDevice.getId(), busDevice.getLedgerIds(), busDevice.getWatchObject()); } } @@ -304,6 +305,8 @@ List codeList = iBusLedgerService.getCodeLists(); //获取管线编号 List pipeCodeList = iBusLedgerService.getPipeCodeList(); + List pipeList = new ArrayList<>(); + final Integer[] index = {1}; results.forEach(deviceImportDTO -> { index[0]++; @@ -357,22 +360,16 @@ return; } //新增点位 - if ("3".equals(deviceImportDTO.getWatchObject())) { + if ("3".equals(deviceImportDTO.getWatchObject()) || "1".equals(deviceImportDTO.getWatchObject())) { //toDo:安装位号一致,入一次即可 //为管线 - BusLedgerPipe busLedgerPipe = new BusLedgerPipe(deviceImportDTO.getPipeCode(), deviceImportDTO.getTagNumber(), + Long pipeLedgerId = IdUtil.getSnowflake(1, 2).nextId(); + BusLedgerPipe busLedgerPipe = new BusLedgerPipe(pipeLedgerId, deviceImportDTO.getPipeCode(), deviceImportDTO.getTagNumber(), deviceImportDTO.getTagNumber(), deviceImportDTO.getLng(), deviceImportDTO.getLat(), - deviceImportDTO.getPosition(), deviceImportDTO.getDeptid(), deviceImportDTO.getDevCode()); - busLedgerPipe = iBusLedgerPipeService.saveBusLedgerPipe(busLedgerPipe); - deviceImportDTO.setLedgerIds(Arrays.asList(busLedgerPipe.getId())); - }else if("1".equals(deviceImportDTO.getWatchObject())){ - //新增闸井 - BusLedger busLedger = new BusLedger(deviceImportDTO.getTagNumber(), - deviceImportDTO.getTagNumber(),deviceImportDTO.getTagNumber(), - deviceImportDTO.getLng(),deviceImportDTO.getLat(),deviceImportDTO.getPosition(), - deviceImportDTO.getDeptid()); - this.iBusLedgerService.save(busLedger); - deviceImportDTO.setLedgerIds(Arrays.asList(busLedger.getId())); + deviceImportDTO.getPosition(), deviceImportDTO.getDeptid(), deviceImportDTO.getDevCode(), deviceImportDTO.getWatchObject()); +// busLedgerPipe = iBusLedgerPipeService.saveBusLedgerPipe(busLedgerPipe); + pipeList.add(busLedgerPipe); + deviceImportDTO.setLedgerIds(Arrays.asList(pipeLedgerId)); } } @@ -383,6 +380,10 @@ return list; } + if (pipeList != null && pipeList.size() > 0) { + iBusLedgerPipeService.saveBatch(pipeList); + } + List busDeviceList = BusDevice.convertDeviceList(results); //保存设备信息 @@ -514,7 +515,7 @@ } -// @Cacheable(value = "alarmRuleCache", key = "#devcode") + // @Cacheable(value = "alarmRuleCache", key = "#devcode") @Override public List getDeviceRule(String devcode) { List alarmRuleValueList = this.baseMapper.getSpecialDeviceRule(devcode); @@ -523,4 +524,18 @@ } return alarmRuleValueList; } + + + @Override + public List getDevicesByCodes(List devcodes) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("DEVCODE", devcodes); + queryWrapper.eq("VALID", "1"); + return this.baseMapper.selectList(queryWrapper); + } + + @Override + public List getListByWellId(Long wellId) { + return this.baseMapper.getListByWellId(wellId); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java index 5073159..7f8bfdc 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service.impl; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -12,11 +13,8 @@ import com.casic.missiles.enums.DeviceDataEnum; import com.casic.missiles.modular.device.dao.BusDeviceMapper; import com.casic.missiles.modular.device.dao.BusLedgerPipeMapper; -import com.casic.missiles.modular.device.dto.BusLedgerPipeMonitorRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeResponseDTO; -import com.casic.missiles.modular.device.dto.MonitorDataRequestDTO; -import com.casic.missiles.modular.device.entity.BusLedgerPipe; +import com.casic.missiles.modular.device.dto.*; +import com.casic.missiles.modular.device.entity.*; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.server.CommonServer; @@ -24,11 +22,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.stream.Collectors; /** *

@@ -63,6 +60,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getPipeCode()), "PIPE_CODE", request.getPipeCode()); queryWrapper.like(ObjectUtil.isNotEmpty(request.getPosition()), "POSITION", request.getPosition()); queryWrapper.in(ObjectUtil.isNotEmpty(deptIds), "DEPTID", deptIds); + queryWrapper.eq(ObjectUtil.isNotEmpty(request.getType()), "TYPE", request.getType()); Page pipePage = this.page(page, queryWrapper); List pipeList = pipePage.getRecords(); pipeList.forEach(pipe -> { @@ -156,6 +154,12 @@ return busLedgerPipe; } + public List getList() { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("VALID", "1"); + return this.baseMapper.selectList(queryWrapper); + } + @Override public Boolean updateMonitorStatus(List tagNumbers) { UpdateWrapper updateWrapper = new UpdateWrapper<>(); @@ -163,4 +167,43 @@ updateWrapper.set("MONITOR_STATE", "3"); return this.update(updateWrapper); } + + @Transactional + @Override + public List addPositionBatch(List results) { + List list = new ArrayList<>(); + if (!CollectionUtil.isEmpty(results)) { + List busLedgerPipeList = this.getList(); + List tagCodes = busLedgerPipeList.stream().map(BusLedgerPipe::getTagNumber).collect(Collectors.toList()); + final Integer[] index = {1}; + results.forEach(busPositionImportDTO -> { + index[0]++; + //设备编号查重 + if (tagCodes.contains(busPositionImportDTO.getTagNumber())) { + list.add("第" + index[0] + "行,安装位号已存在!"); + return; + } + + }); + if (CollectionUtil.isNotEmpty(list)) { + return list; + } + List busDeviceList = BusLedgerPipe.convertDeviceList(results); + + //保存点位信息 + this.saveBatch(busDeviceList); + + } else { + list.add("导入数据不能为空"); + } + return list; + } + + @Override + public List getListByNumber(String tagNumber) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("VALID", "1"); + queryWrapper.eq("TAG_NUMBER", tagNumber); + return this.baseMapper.selectList(queryWrapper); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java index 5798675..ec2b3f5 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.modular.device.dao.SyncLogMapper; import com.casic.missiles.modular.device.entity.SyncLog; import com.casic.missiles.modular.device.service.ISyncLogDetailService; @@ -39,7 +40,8 @@ syncLog.setUpdateCount(updateCount); syncLog.setAddCount(addCount); syncLog.setDeleteCount(deleteCount); - syncLog.setCreateUser(permissionContext.getAuthService().getLoginUser().getName()); + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + syncLog.setCreateUser(null == authUser ? "admin" : authUser.getName()); return this.baseMapper.insert(syncLog) > 0 ? true : false; } diff --git a/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java index b80c202..6be2b47 100644 --- a/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java +++ b/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -1,56 +1,56 @@ -package com.casic.missiles.job.config; - -import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - - -@Slf4j -@Configuration -@Data -@ConditionalOnExpression("T(org.apache.commons.lang3.StringUtils).isNotEmpty('${xxl.job.admin.addresses}')") -public class XxlJobConfig { - @Value("${xxl.job.admin.addresses}") - private String adminAddresses; - - @Value("${xxl.job.accessToken}") - private String accessToken; - - @Value("${xxl.job.executor.appname}") - private String appname; - -// @Value("${xxl.job.executor.address}") -// private String address; - - @Value("${xxl.job.executor.ip}") - private String ip; - - @Value("${xxl.job.executor.port}") - private int port; - - @Value("${xxl.job.executor.logpath}") - private String logPath; - - @Value("${xxl.job.executor.logretentiondays}") - private int logRetentionDays; - - @Bean - public XxlJobSpringExecutor xxlJobExecutor() { - log.info(">>>>>>>>>>> xxl-job config init."); - XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); - xxlJobSpringExecutor.setAdminAddresses(adminAddresses); - xxlJobSpringExecutor.setAppname(appname); -// xxlJobSpringExecutor.setAddress(address); - xxlJobSpringExecutor.setIp(ip); - xxlJobSpringExecutor.setPort(port); - xxlJobSpringExecutor.setAccessToken(accessToken); - xxlJobSpringExecutor.setLogPath(logPath); - xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); - - return xxlJobSpringExecutor; - } -} +//package com.casic.missiles.job.config; +// +//import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +//import lombok.Data; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.beans.factory.annotation.Value; +//import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; +//import org.springframework.context.annotation.Bean; +//import org.springframework.context.annotation.Configuration; +// +// +//@Slf4j +//@Configuration +//@Data +//@ConditionalOnExpression("T(org.apache.commons.lang3.StringUtils).isNotEmpty('${xxl.job.admin.addresses}')") +//public class XxlJobConfig { +// @Value("${xxl.job.admin.addresses}") +// private String adminAddresses; +// +// @Value("${xxl.job.accessToken}") +// private String accessToken; +// +// @Value("${xxl.job.executor.appname}") +// private String appname; +// +//// @Value("${xxl.job.executor.address}") +//// private String address; +// +// @Value("${xxl.job.executor.ip}") +// private String ip; +// +// @Value("${xxl.job.executor.port}") +// private int port; +// +// @Value("${xxl.job.executor.logpath}") +// private String logPath; +// +// @Value("${xxl.job.executor.logretentiondays}") +// private int logRetentionDays; +// +// @Bean +// public XxlJobSpringExecutor xxlJobExecutor() { +// log.info(">>>>>>>>>>> xxl-job config init."); +// XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); +// xxlJobSpringExecutor.setAdminAddresses(adminAddresses); +// xxlJobSpringExecutor.setAppname(appname); +//// xxlJobSpringExecutor.setAddress(address); +// xxlJobSpringExecutor.setIp(ip); +// xxlJobSpringExecutor.setPort(port); +// xxlJobSpringExecutor.setAccessToken(accessToken); +// xxlJobSpringExecutor.setLogPath(logPath); +// xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); +// +// return xxlJobSpringExecutor; +// } +//} diff --git a/casic-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java index 798424c..3785003 100644 --- a/casic-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java +++ b/casic-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -1,37 +1,37 @@ -package com.casic.missiles.job.handler; - - -import com.xxl.job.core.biz.model.ReturnT; -import com.xxl.job.core.context.XxlJobHelper; -import com.xxl.job.core.handler.annotation.XxlJob; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; - -/** - * XxlJob开发示例(Bean模式) - * - * 开发步骤: - * 1、任务开发:在Spring Bean实例中,开发Job方法; - * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 - * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; - * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; - */ -@Slf4j -@Component -public class DemoJobHandler { - - @XxlJob(value = "demoHandler") - public ReturnT execute(String param) throws Exception { - System.out.println("调度任务Demo执行"); - XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); - -// for (int i = 0; i < 5; i++) { -// XxlJobLogger.log("beat at:" + i); -// TimeUnit.SECONDS.sleep(2); -// } - return SUCCESS; - } - -} +//package com.casic.missiles.job.handler; +// +// +//import com.xxl.job.core.biz.model.ReturnT; +//import com.xxl.job.core.context.XxlJobHelper; +//import com.xxl.job.core.handler.annotation.XxlJob; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.stereotype.Component; +// +//import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; +// +///** +// * XxlJob开发示例(Bean模式) +// * +// * 开发步骤: +// * 1、任务开发:在Spring Bean实例中,开发Job方法; +// * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 +// * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; +// * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; +// */ +//@Slf4j +//@Component +//public class DemoJobHandler { +// +// @XxlJob(value = "demoHandler") +// public ReturnT execute(String param) throws Exception { +// System.out.println("调度任务Demo执行"); +// XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); +// +//// for (int i = 0; i < 5; i++) { +//// XxlJobLogger.log("beat at:" + i); +//// TimeUnit.SECONDS.sleep(2); +//// } +// return SUCCESS; +// } +// +//} diff --git a/casic-job/src/main/java/com/casic/missiles/job/handler/OfflineJobHandler.java b/casic-job/src/main/java/com/casic/missiles/job/handler/OfflineJobHandler.java index 1e6708f..276c5db 100644 --- a/casic-job/src/main/java/com/casic/missiles/job/handler/OfflineJobHandler.java +++ b/casic-job/src/main/java/com/casic/missiles/job/handler/OfflineJobHandler.java @@ -1,26 +1,26 @@ -package com.casic.missiles.job.handler; - -import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; -import com.xxl.job.core.context.XxlJobHelper; -import com.xxl.job.core.handler.annotation.XxlJob; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -@RequiredArgsConstructor -public class OfflineJobHandler { - - private final IAlarmRecordsService iAlarmRecordsService; - - /** - * 离线判断处理 - */ - @XxlJob("offlineJobHandler") - public void offlineJobHandler() { - XxlJobHelper.log("check offline"); - iAlarmRecordsService.processOffline(); - } - -} +//package com.casic.missiles.job.handler; +// +//import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +//import com.xxl.job.core.context.XxlJobHelper; +//import com.xxl.job.core.handler.annotation.XxlJob; +//import lombok.RequiredArgsConstructor; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.stereotype.Component; +// +//@Slf4j +//@Component +//@RequiredArgsConstructor +//public class OfflineJobHandler { +// +// private final IAlarmRecordsService iAlarmRecordsService; +// +// /** +// * 离线判断处理 +// */ +// @XxlJob("offlineJobHandler") +// public void offlineJobHandler() { +// XxlJobHelper.log("check offline"); +// iAlarmRecordsService.processOffline(); +// } +// +//} diff --git a/casic-job/src/main/java/com/casic/missiles/job/handler/SuspendExpireJobHandler.java b/casic-job/src/main/java/com/casic/missiles/job/handler/SuspendExpireJobHandler.java index 5ce8fc2..3610add 100644 --- a/casic-job/src/main/java/com/casic/missiles/job/handler/SuspendExpireJobHandler.java +++ b/casic-job/src/main/java/com/casic/missiles/job/handler/SuspendExpireJobHandler.java @@ -1,65 +1,65 @@ -package com.casic.missiles.job.handler; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.casic.missiles.modular.alarm.entity.AlarmRecords; -import com.casic.missiles.modular.alarm.entity.SuspendLog; -import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; -import com.casic.missiles.modular.alarm.service.IApprovalLogService; -import com.casic.missiles.modular.alarm.service.ISuspendLogService; -import com.xxl.job.core.context.XxlJobHelper; -import com.xxl.job.core.handler.annotation.XxlJob; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.time.LocalDate; -import java.time.ZoneId; -import java.time.ZonedDateTime; -import java.util.Date; -import java.util.List; -import java.util.stream.Collectors; - -@Slf4j -@Component -@RequiredArgsConstructor -public class SuspendExpireJobHandler { - - private final ISuspendLogService iSuspendLogService; - private final IAlarmRecordsService iAlarmRecordsService; - private final IApprovalLogService iApprovalLogService; - - /** - * 挂起时间到期处理 - */ - @XxlJob("suspendExpireJobHandler") - public void suspendExpireJobHandler() { - XxlJobHelper.log("check suspend expire"); -// Date today = getTodayStart(); - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.lt("EXPIRE_TIME", new Date()); - queryWrapper.eq("VALID", "1"); - List suspendLogList = iSuspendLogService.list(queryWrapper); - if (suspendLogList != null && suspendLogList.size() > 0) { - suspendLogList.forEach(suspendLog -> { - suspendLog.setValid("0"); - }); - iSuspendLogService.updateBatchById(suspendLogList); - //更新最新状态 - List alarmIds = suspendLogList.stream().map(SuspendLog::getAlarmId).collect(Collectors.toList()); - List alarmRecordsList = iAlarmRecordsService.changeProcessStatus(alarmIds); - //添加流转日志 - iApprovalLogService.saveSuspendLogs(alarmRecordsList); - } - } - - private Date getTodayStart() { - // 获取当天日期 - LocalDate today = LocalDate.now(); - // 当天日期与午夜时间的组合 - ZonedDateTime todayStart = today.atStartOfDay(ZoneId.systemDefault()); - - // 转换为java.util.Date - return Date.from(todayStart.toInstant()); - } - -} +//package com.casic.missiles.job.handler; +// +//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +//import com.casic.missiles.modular.alarm.entity.AlarmRecords; +//import com.casic.missiles.modular.alarm.entity.SuspendLog; +//import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +//import com.casic.missiles.modular.alarm.service.IApprovalLogService; +//import com.casic.missiles.modular.alarm.service.ISuspendLogService; +//import com.xxl.job.core.context.XxlJobHelper; +//import com.xxl.job.core.handler.annotation.XxlJob; +//import lombok.RequiredArgsConstructor; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.stereotype.Component; +// +//import java.time.LocalDate; +//import java.time.ZoneId; +//import java.time.ZonedDateTime; +//import java.util.Date; +//import java.util.List; +//import java.util.stream.Collectors; +// +//@Slf4j +//@Component +//@RequiredArgsConstructor +//public class SuspendExpireJobHandler { +// +// private final ISuspendLogService iSuspendLogService; +// private final IAlarmRecordsService iAlarmRecordsService; +// private final IApprovalLogService iApprovalLogService; +// +// /** +// * 挂起时间到期处理 +// */ +// @XxlJob("suspendExpireJobHandler") +// public void suspendExpireJobHandler() { +// XxlJobHelper.log("check suspend expire"); +//// Date today = getTodayStart(); +// QueryWrapper queryWrapper = new QueryWrapper<>(); +// queryWrapper.lt("EXPIRE_TIME", new Date()); +// queryWrapper.eq("VALID", "1"); +// List suspendLogList = iSuspendLogService.list(queryWrapper); +// if (suspendLogList != null && suspendLogList.size() > 0) { +// suspendLogList.forEach(suspendLog -> { +// suspendLog.setValid("0"); +// }); +// iSuspendLogService.updateBatchById(suspendLogList); +// //更新最新状态 +// List alarmIds = suspendLogList.stream().map(SuspendLog::getAlarmId).collect(Collectors.toList()); +// List alarmRecordsList = iAlarmRecordsService.changeProcessStatus(alarmIds); +// //添加流转日志 +// iApprovalLogService.saveSuspendLogs(alarmRecordsList); +// } +// } +// +// private Date getTodayStart() { +// // 获取当天日期 +// LocalDate today = LocalDate.now(); +// // 当天日期与午夜时间的组合 +// ZonedDateTime todayStart = today.atStartOfDay(ZoneId.systemDefault()); +// +// // 转换为java.util.Date +// return Date.from(todayStart.toInstant()); +// } +// +//} diff --git a/casic-public/src/main/java/com/casic/missiles/enums/AlarmEnum.java b/casic-public/src/main/java/com/casic/missiles/enums/AlarmEnum.java new file mode 100644 index 0000000..e73e469 --- /dev/null +++ b/casic-public/src/main/java/com/casic/missiles/enums/AlarmEnum.java @@ -0,0 +1,46 @@ +package com.casic.missiles.enums; + + +public enum AlarmEnum { + + + Sloping("Sloping", "倾斜报警"), + Destroy("Destroy", "破坏报警"), + DiscL("DiscL", "左侧断线报警"), + Leak("Leak", "泄露报警"), + DiscR("DiscR", "右侧断线报警"), + VibL("VibL", "左侧振动报警"), + VibR("VibR", "右侧振动报警"); +// VibL("自管", "1"), +// VibL("自管", "1"), +// VibL("自管", "1"); + + private String code; + private String value; + + AlarmEnum(String code, String value) { + this.code = code; + this.value = value; + } + + + public static String getValue(String code){ + for(AlarmEnum approvalStatusEnum :values()){ + if(approvalStatusEnum.code.equals(code)){ + return approvalStatusEnum.value; + } + } + return ""; + } + + + + public String getCode() { + return code; + } + + public String getValue() { + return value; + } + +} diff --git a/casic-public/src/main/java/com/casic/missiles/enums/DeviceDataEnum.java b/casic-public/src/main/java/com/casic/missiles/enums/DeviceDataEnum.java index 3fc6f08..13f5b23 100644 --- a/casic-public/src/main/java/com/casic/missiles/enums/DeviceDataEnum.java +++ b/casic-public/src/main/java/com/casic/missiles/enums/DeviceDataEnum.java @@ -4,11 +4,12 @@ public enum DeviceDataEnum { - DATA_GAS("燃气智能监测终端", "data_gas", "devcode,uptime,logtime,well_code", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime"), - DATA_GAS_LIQUID("燃气智能监测终端(一体化)", "data_gasliquid_gas", "devcode,uptime,logtime,well_code", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime"), - DATA_TUBE_OTHER("管网哨兵", "data_tube_other", "devcode,uptime,logtime,well_code", "DEVCODE,GASVAL, VBAT,SIN,RSRP,SINR,UPTIME,LOGTIME", "logtime"), - DATA_MONITOR_PIPE_OTHER("智能警示桩", "data_monitor_pipe_other", "devcode,uptime,logtime,well_number", "DEVCODE,TEMPERATURE,HUMIDITY,VBAT,PIPE_INCLINE_ALARM,PIPE_BREAK_ALARM,GAS_ALARM,LEFT_OFF_LINE_ALARM,LEFT_VIBRATE_ALARM,RIGHT_OFF_LINE_ALARM,RIGHT_VIBRATE_ALARM,PICTURE_ALARM,LEFT_GAS,RIGHT_GAS,LEFT_LENGTH,RIGHT_LENGTH,LOGTIME,UPTIME ", "logtime"), - DATA_PAN_GAS("场站监测云台", "data_pan_gas", "DEVICE_CODE,,logtime,LEDGER_CODE", "ID,LEDGER_NUMBER,DEVICE_CODE,CONCENTRATION,LOGTIME,DIRCETION,PITCH", "LOGTIME"); + DATA_GAS("燃气智能监测终端", "data_gas", "devcode,uptime,logtime,well_code", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime","cell,uptime"), + DATA_GAS_LIQUID("燃气智能监测终端(一体化)", "data_gasliquid_gas", "devcode,uptime,logtime,well_code", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime","cell,uptime"), + DATA_TUBE_OTHER("管网哨兵", "data_tube_other", "devcode,uptime,logtime,well_code", "DEVCODE,GASVAL, VBAT,SIN,RSRP,SINR,UPTIME,LOGTIME,sig,temp,SS_STATE as ssState", "logtime","VBAT,UPTIME"), + DATA_MONITOR_PIPE_OTHER("智能警示桩", "data_monitor_pipe_other", "devcode,uptime,logtime,well_number", "DEVCODE,TEMPERATURE,HUMIDITY,VBAT,PIPE_INCLINE_ALARM,PIPE_BREAK_ALARM,GAS_ALARM,LEFT_OFF_LINE_ALARM,LEFT_VIBRATE_ALARM,RIGHT_OFF_LINE_ALARM,RIGHT_VIBRATE_ALARM,PICTURE_ALARM,LEFT_GAS,RIGHT_GAS,LEFT_LENGTH,RIGHT_LENGTH,LOGTIME,UPTIME ", "logtime","VBAT as cell,uptime"), + DATA_PAN_GAS("场站监测云台", "data_pan_gas", "DEVICE_CODE,,logtime,LEDGER_CODE", "ID,LEDGER_NUMBER,DEVICE_CODE,CONCENTRATION,LOGTIME,DIRCETION,PITCH", "LOGTIME","CONCENTRATION as cell ,LOGTIME as uptime"), + DATA_GAS_OTHER("管网哨兵(一体化)", "data_gas_other", "devcode,uptime,logtime,well_code", "DEVCODE,GASVAL, VBAT,SIN,RSRP,SINR,UPTIME,LOGTIME,sig,temp,SS_STATE as ssState", "logtime","VBAT,UPTIME"); public static DeviceDataEnum typeOf(String type) { DeviceDataEnum deviceDataEnum = null; @@ -28,6 +29,9 @@ case "燃气智能监测终端(一体化)": deviceDataEnum = DATA_GAS_LIQUID; break; + case "管网哨兵(一体化)": + deviceDataEnum = DATA_GAS_OTHER; + break; default: deviceDataEnum = null; } @@ -39,13 +43,15 @@ String tableColumns; String orderColumn; String type; + String cellColumn; - DeviceDataEnum(String type, String tableName, String queryColumns, String tableColumns, String orderColumn) { + DeviceDataEnum(String type, String tableName, String queryColumns, String tableColumns, String orderColumn,String cellColumn) { this.type = type; this.queryColumns = queryColumns; this.tableName = tableName; this.tableColumns = tableColumns; this.orderColumn = orderColumn; + this.cellColumn = cellColumn; ; } @@ -98,4 +104,12 @@ public void setType(String type) { this.type = type; } + + public String getCellColumn() { + return cellColumn; + } + + public void setCellColumn(String cellColumn) { + this.cellColumn = cellColumn; + } } diff --git a/casic-public/src/main/java/com/casic/missiles/enums/DeviceTypeEnum.java b/casic-public/src/main/java/com/casic/missiles/enums/DeviceTypeEnum.java index b372b6b..11cd89a 100644 --- a/casic-public/src/main/java/com/casic/missiles/enums/DeviceTypeEnum.java +++ b/casic-public/src/main/java/com/casic/missiles/enums/DeviceTypeEnum.java @@ -20,7 +20,8 @@ KAD("点型可燃气体探测器", 16,"data_kad"), PANTILT("激光甲烷云台", 17,"data_pan_gas"), PRESSURE("压力监测终端", 18,"data_pressure"), - GasDector("点型可燃气体探测器", 19,"data_gas_dector"); + GasDector("点型可燃气体探测器", 19,"data_gas_dector"), + LGGasOther("管网哨兵(一体化)", 20,"data_gas_other"); // 成员变量 private String name; diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/sensorHub/resolver/ResponseResolver.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/sensorHub/resolver/ResponseResolver.java index 09029f4..fda60a0 100644 --- a/casic-rest-api/src/main/java/com/casic/missiles/modular/sensorHub/resolver/ResponseResolver.java +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/sensorHub/resolver/ResponseResolver.java @@ -3,10 +3,7 @@ import com.alibaba.fastjson.JSONObject; import com.casic.missiles.enums.DeviceTypeEnum; import com.casic.missiles.modular.data.service.IDataAbstractService; -import com.casic.missiles.modular.data.service.impl.DataGasServiceImpl; -import com.casic.missiles.modular.data.service.impl.DataGasliquidGasServiceImpl; -import com.casic.missiles.modular.data.service.impl.DataMonitorPipeOtherServiceImpl; -import com.casic.missiles.modular.data.service.impl.DataTubeOtherServiceImpl; +import com.casic.missiles.modular.data.service.impl.*; import com.casic.missiles.util.SpringContextUtil; import org.springframework.stereotype.Component; @@ -21,6 +18,7 @@ private static DataGasliquidGasServiceImpl dataGasliquidGasService = SpringContextUtil.getApplicationContext().getBean(DataGasliquidGasServiceImpl.class); private static DataTubeOtherServiceImpl dataTubeOtherService = SpringContextUtil.getApplicationContext().getBean(DataTubeOtherServiceImpl.class); private static DataMonitorPipeOtherServiceImpl dataMonitorPipeOtherService = SpringContextUtil.getApplicationContext().getBean(DataMonitorPipeOtherServiceImpl.class); + private static DataGasOtherServiceImpl dataGasOtherService = SpringContextUtil.getApplicationContext().getBean(DataGasOtherServiceImpl.class); private static Map abstractResponseHashMap = new HashMap(); static { @@ -32,6 +30,7 @@ abstractResponseHashMap.put(DeviceTypeEnum.TubeOther.name(), dataTubeOtherService); abstractResponseHashMap.put(DeviceTypeEnum.MonitorPipeOther.name(), dataMonitorPipeOtherService); abstractResponseHashMap.put(DeviceTypeEnum.LG.name(), dataGasliquidGasService); + abstractResponseHashMap.put(DeviceTypeEnum.LGGasOther.name(), dataGasOtherService); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java new file mode 100644 index 0000000..fc881a1 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.data.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 外协管盯 前端控制器 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RestController +@RequestMapping("/system/dataGasOther") +public class DataGasOtherController { + +} + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java new file mode 100644 index 0000000..b5f3627 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.data.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 外协管盯 Mapper 接口 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Mapper +public interface DataGasOtherMapper extends BaseMapper { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml new file mode 100644 index 0000000..8ce1455 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID, DEVCODE, WELL_CODE, WELL_NUMBER, GASVAL, VBAT, BATSTA, SIN, RSRP, SINR, UPTIME, LOGTIME, SIG, TEMP, SS_STATE + + + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java new file mode 100644 index 0000000..53972ba --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java @@ -0,0 +1,94 @@ +package com.casic.missiles.modular.data.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 外协管盯 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Builder +@Data +@TableName("data_gas_other") +@ApiModel(value = "DataGasOther对象", description = "外协管盯") +public class DataGasOther implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId("ID") + private Long id; + + @ApiModelProperty("设备编号") + @TableField("DEVCODE") + private String devcode; + + @ApiModelProperty("点位编号") + @TableField("WELL_CODE") + private String wellCode; + + @ApiModelProperty("位号") + @TableField("WELL_NUMBER") + private String wellNumber; + + @ApiModelProperty("气体浓度采样值") + @TableField("GASVAL") + private String gasval; + + @ApiModelProperty("设备电池电压值(毫伏)") + @TableField("VBAT") + private String vbat; + + @ApiModelProperty("电池状态0 正常、 1 低电告警、2 关机") + @TableField("BATSTA") + private String batsta; + + @ApiModelProperty("接收信号强度等级") + @TableField("SIN") + private String sin; + + @ApiModelProperty("接收信号参考质量 服务小 区的 RSRP 值") + @TableField("RSRP") + private String rsrp; + + @ApiModelProperty("信噪比") + @TableField("SINR") + private String sinr; + + @ApiModelProperty("采集时间") + @TableField("UPTIME") + private Date uptime; + + @ApiModelProperty("上传时间") + @TableField("LOGTIME") + private Date logtime; + + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态,0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java index 86077b8..f4d4417 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java @@ -76,4 +76,17 @@ private Date logtime; + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态:0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java new file mode 100644 index 0000000..842ca0b --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.data.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.data.entity.DataGasOther; + +/** + *

+ * 外协管盯 服务类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +public interface IDataGasOtherService extends IService { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java new file mode 100644 index 0000000..4c660e9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java @@ -0,0 +1,226 @@ +package com.casic.missiles.modular.data.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.enums.DeviceTypeEnum; +import com.casic.missiles.enums.DictEnum; +import com.casic.missiles.modular.alarm.dto.AlarmDeviceRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.AlarmRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.BusAlarmLedgerDTO; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.data.dao.DataGasMapper; +import com.casic.missiles.modular.data.dao.DataGasOtherMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import com.casic.missiles.modular.data.entity.DataTubeOther; +import com.casic.missiles.modular.data.service.IDataAbstractService; +import com.casic.missiles.modular.data.service.IDataGasOtherService; +import com.casic.missiles.modular.data.service.ITrackLogService; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Optional; + +/** + *

+ * 外协管盯 服务实现类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RequiredArgsConstructor +@Service +public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { + + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + private final DataGasMapper dataGasMapper; + private final IAlarmRecordsService alarmRecordsService; + private final IAlarmRuleService alarmRuleService; + private final ITrackLogService iTrackLogService; + private final IBusDeviceService busDeviceService; + + @Override + public void process(String dataContent) { + + //解析数据+根据业务处理存储数据 + JSONObject json = JSONObject.parseObject(dataContent); + String devCode = json.get("devCode").toString(); + JSONObject jsonObject = json.getJSONObject("mBody"); + if (mType[0].equals(json.get("mType")) || mType[3].equals(json.get("mType"))) {//存储上报数据 + this.processNormalData(jsonObject, devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + this.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.TubeOther.name().equals(json.get("devType"))) { + if ("TubeOtherConfigSuccess".equals(jsonObject.get("bType"))) { +// deviceConfigManager.updateStatus(devCode); + } + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } else if (mType[4].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); +// imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; + try { + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); + } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + } + } + + @Transactional + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.getString("cell"); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = jsonObject.getJSONArray("datas"); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + String bfcf = busDeviceService.getBfcf(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).getString("gasval"); + String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); + String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); + String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataGasOther.builder() + .wellCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .wellNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .devcode(devCode) +// .cell(cell) + .gasval(gas) + .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime))) + .logtime(new Date()) + .vbat(vbat) + .batsta(batsta) + .rsrp(rsrp) + .sin(pci) + .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) + .build());//存储采集数据 + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) continue; + + //3.清除设备告警 + alarmRecordsService.cancelDeviceAlarm(devCode); + //4.存报警 + //若没绑定井,则不产生报警 + boolean alarmFlag = false; + if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { + //获取报警规则 + List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); + for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { + if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && + Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { + alarmFlag = true; + //写入报警 + //1、判断报警是否已存在 + if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.TubeOther.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); + //7.更新管线状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java index d248540..b33a1ee 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java @@ -91,7 +91,6 @@ } - public List getBusAlarmLedgerList(String devCode) { return this.dataGasMapper.getListByDevCode(devCode); } @@ -113,6 +112,13 @@ for (int i = 0; i < jsonArray.size(); i++) { try { String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) .findFirst(); @@ -175,18 +181,18 @@ alarmRecordsService.cancelDeviceAlarm(devCode); //4.存报警 //若没绑定井,则不产生报警 - boolean alarmFlag = false; + boolean alarmFlag = false; if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { //获取报警规则 List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { - alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); } break; } @@ -197,7 +203,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及设备状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新监测井状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java index e848fce..6297093 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java @@ -84,42 +84,78 @@ } - @Transactional - public void processAlarmData(JSONObject jsonObject, String devCode) { - JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + public void processEventAlarm(String devCode, String eventTypeCode, String logTime, String eventValue) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - //获取报警事件 - List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - - List busWellDTOList = dataGasMapper.getListByDevCode(devCode); - //若没绑定井,则不产生报警 - if (busWellDTOList != null && busWellDTOList.size() > 0) { - - for (int i = 0; i < jsonArray.size(); i++) { + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + //特殊处理消警 + if ("0".equals(eventValue)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, eventTypeCode); + } + return; } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> eventTypeCode.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 - if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + if (!alarmDeviceRuleResponseDTO.isPresent()) return; //1.查询是否已存在该类报警 - if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) return; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); - - + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + } + } + } + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + try { + String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmEventCode)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } } } } @@ -169,7 +205,76 @@ .rightVibrateAlarm(VibR) .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(uptime))) .logtime(new Date()) - .build());//存储采集数据 + .build()); + + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + ruleResponseDTOList.forEach(ruleResponseDTO -> { + + if ("Sloping".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Sloping)&&(!alarmRecordsService.isWatchAlarms(devCode,"Sloping"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Sloping", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Sloping)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Sloping"); + + } + } + if ("Destroy".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Destroy)&&(!alarmRecordsService.isWatchAlarms(devCode,"Destroy"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Destroy", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Destroy)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Destroy"); + + } + } + if ("Leak".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Leak)&&(!alarmRecordsService.isWatchAlarms(devCode,"Leak"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Leak", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Leak)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Leak"); + + } + } + if ("DiscL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscL)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscL"); + + } + } + if ("DiscR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscR)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscR"); + } + } + + if ("VibL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibL)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibL"); + } + } + if ("VibR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibR)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibR"); + } + } + }); + +// //处理报警事件 +// processEventAlarm(devCode,"Sloping",uptime,Sloping); +// processEventAlarm(devCode,"Destroy",uptime,Destroy); +// processEventAlarm(devCode,"Leak",uptime,Leak); +// processEventAlarm(devCode,"DiscL",uptime,DiscL); +// processEventAlarm(devCode,"DiscR",uptime,DiscR); +// processEventAlarm(devCode,"VibL",uptime,VibL); +// processEventAlarm(devCode,"VibR",uptime,VibR); + //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -197,7 +302,7 @@ if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && gas >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), gas)) { @@ -213,7 +318,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R,alarmFlag?"燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R, alarmFlag ? "燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java index f913775..895d201 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java @@ -89,6 +89,7 @@ String bfcf = busDeviceService.getBfcf(devCode); if (DictEnum.BF_ON.equals(bfcf)) { JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); //获取报警事件 List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); List busWellDTOList = dataGasMapper.getListByDevCode(devCode); @@ -96,25 +97,43 @@ if (busWellDTOList != null && busWellDTOList.size() > 0) { for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 if (!alarmDeviceRuleResponseDTO.isPresent()) continue; //1.查询是否已存在该类报警 if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { @@ -141,6 +160,9 @@ String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); gas = String.format("%.2f", Double.valueOf(gas)); //1.存数据 save(DataTubeOther.builder() @@ -156,6 +178,9 @@ .rsrp(rsrp) .sin(pci) .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) .build());//存储采集数据 //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -186,7 +211,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 98e736b..2288075 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -216,5 +216,15 @@ public ReturnDTO syncDeviceStatus() { return ReturnUtil.success(iBusDeviceService.syncDeviceStatus()); } + + @ApiOperation("根据闸井id获取设备信息") + @PostMapping("/getListByWellId") + @ResponseBody + public ReturnDTO getListByWellId(@RequestBody IdDTO idDTO) { + Assert.isFalse(ObjectUtil.isEmpty(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iBusDeviceService.getListByWellId(idDTO.getId())); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java index 72a2d84..d6d9743 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java @@ -85,6 +85,7 @@ return ReturnUtil.success(iBusLedgerService.detail(idDTO.getId())); } + /** * 同步三级部门 * diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java index 9e412d2..4316b56 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java @@ -1,22 +1,33 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.response.ErrorResponseData; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; +import com.casic.missiles.modular.device.dto.BusPositionImportDTO; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.ReturnUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataAccessException; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; /** @@ -40,8 +51,44 @@ @PostMapping("/addPosition") @ResponseBody public ReturnDTO addPosition(@RequestBody BusLedgerPipe busLedgerPipe) { + + List busLedgerPipeList = iBusLedgerPipeService.getListByNumber(busLedgerPipe.getTagNumber()); + if(busLedgerPipeList!=null&&busLedgerPipeList.size()>0){ + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE,"安装位号已存!!!"); + } + Long id =IdUtil.getSnowflake(1,2).nextId(); + busLedgerPipe.setId(id); iBusLedgerPipeService.save(busLedgerPipe); - return ReturnUtil.success(busLedgerPipe.getId()); + return ReturnUtil.success(id); + } + + @ApiOperation("批量导入") + @RequestMapping(value = "/batchImport", method = RequestMethod.POST) + @ResponseBody + public Object batchImport(@RequestParam("file") MultipartFile file) { + List results = new ArrayList<>(); + try { + results = this.importExcel(BusPositionImportDTO.class, file, null, null); + List list = iBusLedgerPipeService.addPositionBatch(results); + if (!CollectionUtil.isEmpty(list)) { + //获取校验报错信息 + return new ErrorResponseData(list.get(0)); + } + } catch (Exception e) { + return catchMybatisPlusException(e, "导入位置信息失败"); + } + return ResponseData.success(); + } + + private ResponseData catchMybatisPlusException(Exception e, String errorMsg) { + if (e instanceof DataAccessException) { + DataAccessException mybatisPlusException = (DataAccessException) e; + String message = mybatisPlusException.getRootCause().getMessage(); + if (message.contains("Duplicate entry '")) { + return new ErrorResponseData("安装位号重复:" + message.replaceAll("Duplicate entry '", "").replaceAll("' for key 'DEVCODE'", "")); + } + } + return new ErrorResponseData(errorMsg); } @ApiOperation("编辑点位") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java index d1e08a8..d938876 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java @@ -51,6 +51,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getOperatorName()), "CREATE_USER", request.getOperatorName()); queryWrapper.ge(ObjectUtil.isNotEmpty(request.getStartTime()), "START_TIME", request.getStartTime()); queryWrapper.le(ObjectUtil.isNotEmpty(request.getEndTime()), "END_TIME", request.getEndTime()); + queryWrapper.orderByDesc("START_TIME"); return ReturnUtil.success(super.packForBT(iSyncLogService.page(page, queryWrapper))); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java index 5ee5291..23ddee9 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java @@ -73,4 +73,12 @@ " where bd.DEVCODE= #{devcode} and bd.VALID=1 " + ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD asc") List getDeviceTypeRule(@Param("devcode") String devcode); + + + @Select("SELECT bd.* from bus_device bd " + + "left JOIN bus_device_ledger bl on bd.id= bl.DEVICE_ID and bl.VALID=1 " + + "LEFT JOIN bus_ledger_all_view bv on bv.id= bl.LEDGER_ID and bv.type= bl.TYPE and bv.VALID=1 " + + "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") + List getListByWellId(@Param("wellId") Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java index e1d16c4..a4c3f7a 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java @@ -37,7 +37,7 @@ @Select("SELECT b.ORG_ID,b.ORG_CODE,b.ORG_NAME,b.PARENT_ID FROM `bus_sync_org_relation` b WHERE b.DEL_FLAG =0 and b.PARENT_ID = #{syncId} ") List synDept(@Param("syncId") String syncId); - @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view ") + @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view where VALID=1") List getBusLedgers(); @Select("SELECT DEVCODE FROM `bus_device` where VALID>0 ") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml index 99ef10b..c6d1fff 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml @@ -29,6 +29,7 @@ bp.DEVICE_MODEL as deviceModel, bt.TYPE_NAME as typeName, + bp.DATA_SERVICE as deviceCategory, bm.`NAME` as manufactureName, bl.tagNumber as tagNumber, bl.id as ledgerId, @@ -81,6 +82,10 @@ and bd.LOGTIME #{request.logTime2} + + and bp.DATA_SERVICE =#{request.deviceCategory} + + ORDER BY bd.INSTALL_DATE DESC diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml index bdadb6a..d3f4684 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml @@ -40,7 +40,7 @@ `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + AND bdl.VALID = 1 JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -99,8 +99,8 @@ bm.`NAME` as manufactureName FROM `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE - LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID and bdl.type=blp.type + AND bdl.VALID = 1 LEFT JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -117,7 +117,9 @@ WITH station_temp as(SELECT bl.ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID FROM `bus_ledger` bl where bl.VALID=1 and bl.TYPE =2) - select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME from station_temp bl + select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME,bd.DEVCODE from station_temp bl left join bus_device_ledger bdl on bdl.LEDGER_ID = bl.ID and bdl.TYPE =2 and bdl.valid=1 left join bus_device bd on bd.id= bdl.DEVICE_ID and bd.VALID=1 order by bl.ID diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml index 7b92b04..1d97c64 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml @@ -184,7 +184,7 @@ WHERE EQ_LOCNO like 'N%' and - EQ_CATEGORY in (1,3) + EQ_CATEGORY in (1,2,3,5) diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java index 859cf08..143b42d 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java @@ -23,6 +23,9 @@ @ApiModelProperty("设备类型id") private Long typeId; + @ApiModelProperty("产品名称") + private String productName; + @ApiModelProperty("指令集合") private List commandConfigList; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java index 646610b..2cb5894 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("最新上传结束时间") private String logTime2; + + @ApiModelProperty("设备类别(0:自有设备,1:数据服务)") + private String deviceCategory; } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java index 8c95537..28b30fa 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java @@ -44,6 +44,9 @@ @ExcelProperty("关联管线") private String pipeCode; + @ExcelProperty("监测类型") + private String monitorType; + private String watchObject; private Long deviceType; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java index 0980c34..ac5daf0 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java @@ -24,4 +24,7 @@ @ApiModelProperty("详细位置") private String position; + @ApiModelProperty("1:其他,3:管线") + private String type; + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java new file mode 100644 index 0000000..bce7ebd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.device.dto; + + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class BusPositionImportDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + + @ExcelProperty("管线编号") + private String pipeCode; + + @ExcelProperty("安装位号") + private String tagNumber; + + @ExcelProperty("经度(高德)") + private String lngGaode; + + @ExcelProperty("纬度(高德)") + private String latGaode; + + @ExcelProperty("详细位置") + private String position; + + @ExcelProperty("管理单位") + private Long deptid; + + @ExcelProperty("位置类别") + private String type; + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java index 58faa0e..d72ae78 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java @@ -16,13 +16,13 @@ private String deviceId; //移动命令:left right up down left_up left_down right_up right_down GOTO_PRESET - @ApiModelProperty("移动命令") + @ApiModelProperty("移动命令(left right up down left_up left_down right_up right_down)") private String command; - @ApiModelProperty("速度") + @ApiModelProperty("速度,一般传100") private String speed; - @ApiModelProperty("启停命令") + @ApiModelProperty("启停命令(0:开始,1:结束)") private String cameraAction; @ApiModelProperty("预置点编号") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java index b4ec73c..5a3d0b0 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java @@ -66,7 +66,7 @@ private String powerSupplyMode; - @ApiModelProperty("是否结束数据服务") + @ApiModelProperty("是否结束数据服务(1:是,0:否)") @TableField("DATA_SERVICE") private String dataService; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java index 1184995..407e3c1 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java @@ -193,10 +193,14 @@ @TableField(exist = false) private String bfztName; + @ApiModelProperty("设备类别(0:自有设备,1:数据服务)") + @TableField(exist = false) + private String deviceCategory; + public BusDevice() { } - public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds) { + public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds, String monitorType) { this.devcode = devcode; this.deviceType = deviceType; this.productId = productId; @@ -204,6 +208,7 @@ this.installDate = installDate; this.watchObject = watchObject; this.ledgerIds = ledgerIds; + this.monitorType = monitorType; } public static List convertDeviceList(List dtoList) { @@ -227,7 +232,8 @@ deviceImportDTO.getValid(), deviceImportDTO.getInstallDate(), deviceImportDTO.getWatchObject(), - deviceImportDTO.getLedgerIds())); + deviceImportDTO.getLedgerIds(), + deviceImportDTO.getMonitorType())); }); return busDeviceList; } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java index 12b52de..1ac8455 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java @@ -1,16 +1,20 @@ package com.casic.missiles.modular.device.entity; +import cn.hutool.core.util.IdUtil; 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 com.casic.missiles.modular.device.dto.BusPositionImportDTO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import java.io.Serializable; +import java.util.ArrayList; import java.util.Date; +import java.util.List; /** *

@@ -29,7 +33,7 @@ private static final long serialVersionUID = 1L; @ApiModelProperty("主键") - @TableId(value = "ID", type = IdType.AUTO) +// @TableId(value = "ID", type = IdType.AUTO) private Long id; @ApiModelProperty("编号") @@ -60,6 +64,10 @@ @TableField("DEPTID") private Long deptid; + @ApiModelProperty("类别(1:其他,3:管线)") + @TableField("`TYPE`") + private String type; + @ApiModelProperty("责任部门") @TableField("RESPONSIBLE_DEPT") private Long responsibleDept; @@ -110,9 +118,10 @@ public BusLedgerPipe() { } - public BusLedgerPipe(String pipeCode, String ledgerName, String tagNumber, + public BusLedgerPipe(Long id,String pipeCode, String ledgerName, String tagNumber, String lngGaode, String latGaode, String position, - Long deptid, String devcode) { + Long deptid, String devcode, String type) { + this.id=id; this.pipeCode = pipeCode; this.ledgerName = ledgerName; this.tagNumber = tagNumber; @@ -121,5 +130,26 @@ this.position = position; this.deptid = deptid; this.devcode = devcode; + this.type = type; } + + public static List convertDeviceList(List dtoList) { + + + List busDeviceList = new ArrayList<>(); + dtoList.forEach(positionImportDTO -> { + + busDeviceList.add(new BusLedgerPipe(IdUtil.getSnowflake(1,2).nextId(),positionImportDTO.getPipeCode(), + positionImportDTO.getTagNumber(), + positionImportDTO.getTagNumber(), + positionImportDTO.getLngGaode(), + positionImportDTO.getLatGaode(), + positionImportDTO.getPosition(), + positionImportDTO.getDeptid(), + "", + positionImportDTO.getType())); + }); + return busDeviceList; + } + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java index aaaa409..63c0576 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java @@ -52,4 +52,8 @@ List getDeviceRule(String devcode); + List getDevicesByCodes(List devcodes); + + List getListByWellId(Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java index 14f6a93..8692383 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java @@ -2,11 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; -import com.casic.missiles.core.datascope.DataScope; -import com.casic.missiles.modular.device.dto.BusLedgerPipeMonitorRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeResponseDTO; -import com.casic.missiles.modular.device.dto.MonitorDataRequestDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import java.util.List; @@ -26,17 +22,21 @@ Page monitorPipePageList(Page page, BusLedgerPipeMonitorRequestDTO request); - BusLedgerPipeResponseDTO detail(Long id,String devcode); + BusLedgerPipeResponseDTO detail(Long id, String devcode); - List> watchDataByPipe(MonitorDataRequestDTO requestDTO); + List> watchDataByPipe(MonitorDataRequestDTO requestDTO); - List> pipeList(); + List> pipeList(); - List> deviceList(); + List> deviceList(); BusLedgerPipe saveBusLedgerPipe(BusLedgerPipe busLedgerPipe); Boolean updateMonitorStatus(List tagNumbers); + List addPositionBatch(List results); + + List getListByNumber(String tagNumber); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java index 66ed812..ad72230 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java @@ -12,9 +12,12 @@ import com.casic.missiles.modular.device.dto.BusConfigOtherDTO; import com.casic.missiles.modular.device.dto.BusConfigRequestDTO; import com.casic.missiles.modular.device.entity.BusConfig; +import com.casic.missiles.modular.device.entity.BusDevice; import com.casic.missiles.modular.device.service.IBusConfigService; +import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.HttpClientUtils; import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -22,6 +25,9 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.LinkedBlockingDeque; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; /** *

@@ -36,6 +42,11 @@ public class BusConfigServiceImpl extends ServiceImpl implements IBusConfigService { private final AbstractPermissionContext abstractPermissionContext; + private final IBusDeviceService iBusDeviceService; + private final ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(3, 6, 60, TimeUnit.SECONDS, new LinkedBlockingDeque<>(10)); + + @Value("${casic.brSendConfigUrl}") + private String brSendConfigUrl; @Transactional @Override @@ -105,6 +116,42 @@ .operator(user != null ? user.getId() : null) .operatorName(user != null ? user.getName() : "").build()); }); + + + threadPoolExecutor.execute( + () -> { + //发送第三方下发: + if (busConfigOtherDTO.getProductName().contains("管网哨兵")) { + List busDeviceList = iBusDeviceService.getDevicesByCodes(devcodes); + for (BusDevice busDevice : busDeviceList) { + if (ObjectUtil.isAllNotEmpty(busDevice.getNbProductId(), busDevice.getNbDeviceId())) { + Map commandMap = new HashMap<>(); + commandMap.put("productId", busDevice.getNbProductId()); + commandMap.put("devCode", busDevice.getDevcode()); + commandMap.put("deviceId", busDevice.getNbDeviceId()); + commandMap.put("cmdList", busConfigOtherDTO.getCommandConfigList()); + HttpClientUtils.post(brSendConfigUrl+"/tube/config/send", JSON.toJSONString(commandMap)); + } + } + } else if (busConfigOtherDTO.getProductName().contains("智能警示桩")) { + + List busDeviceList = iBusDeviceService.getDevicesByCodes(devcodes); + for (BusDevice busDevice : busDeviceList) { + if (ObjectUtil.isAllNotEmpty(busDevice.getNbProductId(), busDevice.getNbDeviceId())) { + Map commandMap = new HashMap<>(); + commandMap.put("productId", busDevice.getNbProductId()); + commandMap.put("devCode", busDevice.getDevcode()); + commandMap.put("deviceId", busDevice.getNbDeviceId()); + commandMap.put("cmdList", busConfigOtherDTO.getCommandConfigList()); + HttpClientUtils.post(brSendConfigUrl+"/sentinel/config/send", JSON.toJSONString(commandMap)); + } + } + + } + } + ); + + return this.saveBatch(busConfigs); // List> mapList = new ArrayList<>(); // Map commandMap = new HashMap<>(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java index 60d15e5..bae6902 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java @@ -3,6 +3,7 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -80,6 +81,7 @@ @Override public Page listPage(Page page, BusDeviceDTO request) { + page.setOptimizeCountSql(false); Page busDevicePage = this.baseMapper.pageList(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List busDeviceList = busDevicePage.getRecords(); busDeviceList.forEach(busDevice -> { @@ -227,7 +229,7 @@ if (deviceDataEnum.getTableColumns().contains("cell")) { String[] queryColumns = deviceDataEnum.getQueryColumns().split(",", 4); resultMap = this.baseMapper.cellAnalysis(deviceDataEnum.getTableName(), - "cell,uptime", + deviceDataEnum.getCellColumn(), queryColumns[0], queryColumns[1], deviceDataEnum.getOrderColumn(), @@ -265,14 +267,13 @@ } else { List busDeviceLedgers = busDeviceLedgerService.getListByDeviceId(busDevice.getId()); //没绑定关系,先绑定 - if (ObjectUtil.isNotEmpty(busDeviceLedgers)) { + if (busDeviceLedgers == null || busDeviceLedgers.size() < 1) { busDeviceLedgerService.saveDeviceLedger(busDevice.getId(), busDevice.getLedgerIds(), busDevice.getWatchObject()); } else { //已绑定,判断是否位置变了 List ledgerIdsPre = busDeviceLedgers.stream().map(BusDeviceLedger::getLedgerId).collect(Collectors.toList()); if (ledgerIds.containsAll(ledgerIdsPre) && ledgerIdsPre.containsAll(ledgerIds)) { } else { - busDeviceLedgerService.deleteDeviceLedgers(Arrays.asList(busDevice.getId())); busDeviceLedgerService.saveDeviceLedger(busDevice.getId(), busDevice.getLedgerIds(), busDevice.getWatchObject()); } } @@ -304,6 +305,8 @@ List codeList = iBusLedgerService.getCodeLists(); //获取管线编号 List pipeCodeList = iBusLedgerService.getPipeCodeList(); + List pipeList = new ArrayList<>(); + final Integer[] index = {1}; results.forEach(deviceImportDTO -> { index[0]++; @@ -357,22 +360,16 @@ return; } //新增点位 - if ("3".equals(deviceImportDTO.getWatchObject())) { + if ("3".equals(deviceImportDTO.getWatchObject()) || "1".equals(deviceImportDTO.getWatchObject())) { //toDo:安装位号一致,入一次即可 //为管线 - BusLedgerPipe busLedgerPipe = new BusLedgerPipe(deviceImportDTO.getPipeCode(), deviceImportDTO.getTagNumber(), + Long pipeLedgerId = IdUtil.getSnowflake(1, 2).nextId(); + BusLedgerPipe busLedgerPipe = new BusLedgerPipe(pipeLedgerId, deviceImportDTO.getPipeCode(), deviceImportDTO.getTagNumber(), deviceImportDTO.getTagNumber(), deviceImportDTO.getLng(), deviceImportDTO.getLat(), - deviceImportDTO.getPosition(), deviceImportDTO.getDeptid(), deviceImportDTO.getDevCode()); - busLedgerPipe = iBusLedgerPipeService.saveBusLedgerPipe(busLedgerPipe); - deviceImportDTO.setLedgerIds(Arrays.asList(busLedgerPipe.getId())); - }else if("1".equals(deviceImportDTO.getWatchObject())){ - //新增闸井 - BusLedger busLedger = new BusLedger(deviceImportDTO.getTagNumber(), - deviceImportDTO.getTagNumber(),deviceImportDTO.getTagNumber(), - deviceImportDTO.getLng(),deviceImportDTO.getLat(),deviceImportDTO.getPosition(), - deviceImportDTO.getDeptid()); - this.iBusLedgerService.save(busLedger); - deviceImportDTO.setLedgerIds(Arrays.asList(busLedger.getId())); + deviceImportDTO.getPosition(), deviceImportDTO.getDeptid(), deviceImportDTO.getDevCode(), deviceImportDTO.getWatchObject()); +// busLedgerPipe = iBusLedgerPipeService.saveBusLedgerPipe(busLedgerPipe); + pipeList.add(busLedgerPipe); + deviceImportDTO.setLedgerIds(Arrays.asList(pipeLedgerId)); } } @@ -383,6 +380,10 @@ return list; } + if (pipeList != null && pipeList.size() > 0) { + iBusLedgerPipeService.saveBatch(pipeList); + } + List busDeviceList = BusDevice.convertDeviceList(results); //保存设备信息 @@ -514,7 +515,7 @@ } -// @Cacheable(value = "alarmRuleCache", key = "#devcode") + // @Cacheable(value = "alarmRuleCache", key = "#devcode") @Override public List getDeviceRule(String devcode) { List alarmRuleValueList = this.baseMapper.getSpecialDeviceRule(devcode); @@ -523,4 +524,18 @@ } return alarmRuleValueList; } + + + @Override + public List getDevicesByCodes(List devcodes) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("DEVCODE", devcodes); + queryWrapper.eq("VALID", "1"); + return this.baseMapper.selectList(queryWrapper); + } + + @Override + public List getListByWellId(Long wellId) { + return this.baseMapper.getListByWellId(wellId); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java index 5073159..7f8bfdc 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service.impl; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -12,11 +13,8 @@ import com.casic.missiles.enums.DeviceDataEnum; import com.casic.missiles.modular.device.dao.BusDeviceMapper; import com.casic.missiles.modular.device.dao.BusLedgerPipeMapper; -import com.casic.missiles.modular.device.dto.BusLedgerPipeMonitorRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeResponseDTO; -import com.casic.missiles.modular.device.dto.MonitorDataRequestDTO; -import com.casic.missiles.modular.device.entity.BusLedgerPipe; +import com.casic.missiles.modular.device.dto.*; +import com.casic.missiles.modular.device.entity.*; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.server.CommonServer; @@ -24,11 +22,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.stream.Collectors; /** *

@@ -63,6 +60,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getPipeCode()), "PIPE_CODE", request.getPipeCode()); queryWrapper.like(ObjectUtil.isNotEmpty(request.getPosition()), "POSITION", request.getPosition()); queryWrapper.in(ObjectUtil.isNotEmpty(deptIds), "DEPTID", deptIds); + queryWrapper.eq(ObjectUtil.isNotEmpty(request.getType()), "TYPE", request.getType()); Page pipePage = this.page(page, queryWrapper); List pipeList = pipePage.getRecords(); pipeList.forEach(pipe -> { @@ -156,6 +154,12 @@ return busLedgerPipe; } + public List getList() { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("VALID", "1"); + return this.baseMapper.selectList(queryWrapper); + } + @Override public Boolean updateMonitorStatus(List tagNumbers) { UpdateWrapper updateWrapper = new UpdateWrapper<>(); @@ -163,4 +167,43 @@ updateWrapper.set("MONITOR_STATE", "3"); return this.update(updateWrapper); } + + @Transactional + @Override + public List addPositionBatch(List results) { + List list = new ArrayList<>(); + if (!CollectionUtil.isEmpty(results)) { + List busLedgerPipeList = this.getList(); + List tagCodes = busLedgerPipeList.stream().map(BusLedgerPipe::getTagNumber).collect(Collectors.toList()); + final Integer[] index = {1}; + results.forEach(busPositionImportDTO -> { + index[0]++; + //设备编号查重 + if (tagCodes.contains(busPositionImportDTO.getTagNumber())) { + list.add("第" + index[0] + "行,安装位号已存在!"); + return; + } + + }); + if (CollectionUtil.isNotEmpty(list)) { + return list; + } + List busDeviceList = BusLedgerPipe.convertDeviceList(results); + + //保存点位信息 + this.saveBatch(busDeviceList); + + } else { + list.add("导入数据不能为空"); + } + return list; + } + + @Override + public List getListByNumber(String tagNumber) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("VALID", "1"); + queryWrapper.eq("TAG_NUMBER", tagNumber); + return this.baseMapper.selectList(queryWrapper); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java index 5798675..ec2b3f5 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.modular.device.dao.SyncLogMapper; import com.casic.missiles.modular.device.entity.SyncLog; import com.casic.missiles.modular.device.service.ISyncLogDetailService; @@ -39,7 +40,8 @@ syncLog.setUpdateCount(updateCount); syncLog.setAddCount(addCount); syncLog.setDeleteCount(deleteCount); - syncLog.setCreateUser(permissionContext.getAuthService().getLoginUser().getName()); + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + syncLog.setCreateUser(null == authUser ? "admin" : authUser.getName()); return this.baseMapper.insert(syncLog) > 0 ? true : false; } diff --git a/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java index b80c202..6be2b47 100644 --- a/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java +++ b/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -1,56 +1,56 @@ -package com.casic.missiles.job.config; - -import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - - -@Slf4j -@Configuration -@Data -@ConditionalOnExpression("T(org.apache.commons.lang3.StringUtils).isNotEmpty('${xxl.job.admin.addresses}')") -public class XxlJobConfig { - @Value("${xxl.job.admin.addresses}") - private String adminAddresses; - - @Value("${xxl.job.accessToken}") - private String accessToken; - - @Value("${xxl.job.executor.appname}") - private String appname; - -// @Value("${xxl.job.executor.address}") -// private String address; - - @Value("${xxl.job.executor.ip}") - private String ip; - - @Value("${xxl.job.executor.port}") - private int port; - - @Value("${xxl.job.executor.logpath}") - private String logPath; - - @Value("${xxl.job.executor.logretentiondays}") - private int logRetentionDays; - - @Bean - public XxlJobSpringExecutor xxlJobExecutor() { - log.info(">>>>>>>>>>> xxl-job config init."); - XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); - xxlJobSpringExecutor.setAdminAddresses(adminAddresses); - xxlJobSpringExecutor.setAppname(appname); -// xxlJobSpringExecutor.setAddress(address); - xxlJobSpringExecutor.setIp(ip); - xxlJobSpringExecutor.setPort(port); - xxlJobSpringExecutor.setAccessToken(accessToken); - xxlJobSpringExecutor.setLogPath(logPath); - xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); - - return xxlJobSpringExecutor; - } -} +//package com.casic.missiles.job.config; +// +//import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +//import lombok.Data; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.beans.factory.annotation.Value; +//import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; +//import org.springframework.context.annotation.Bean; +//import org.springframework.context.annotation.Configuration; +// +// +//@Slf4j +//@Configuration +//@Data +//@ConditionalOnExpression("T(org.apache.commons.lang3.StringUtils).isNotEmpty('${xxl.job.admin.addresses}')") +//public class XxlJobConfig { +// @Value("${xxl.job.admin.addresses}") +// private String adminAddresses; +// +// @Value("${xxl.job.accessToken}") +// private String accessToken; +// +// @Value("${xxl.job.executor.appname}") +// private String appname; +// +//// @Value("${xxl.job.executor.address}") +//// private String address; +// +// @Value("${xxl.job.executor.ip}") +// private String ip; +// +// @Value("${xxl.job.executor.port}") +// private int port; +// +// @Value("${xxl.job.executor.logpath}") +// private String logPath; +// +// @Value("${xxl.job.executor.logretentiondays}") +// private int logRetentionDays; +// +// @Bean +// public XxlJobSpringExecutor xxlJobExecutor() { +// log.info(">>>>>>>>>>> xxl-job config init."); +// XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); +// xxlJobSpringExecutor.setAdminAddresses(adminAddresses); +// xxlJobSpringExecutor.setAppname(appname); +//// xxlJobSpringExecutor.setAddress(address); +// xxlJobSpringExecutor.setIp(ip); +// xxlJobSpringExecutor.setPort(port); +// xxlJobSpringExecutor.setAccessToken(accessToken); +// xxlJobSpringExecutor.setLogPath(logPath); +// xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); +// +// return xxlJobSpringExecutor; +// } +//} diff --git a/casic-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java index 798424c..3785003 100644 --- a/casic-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java +++ b/casic-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -1,37 +1,37 @@ -package com.casic.missiles.job.handler; - - -import com.xxl.job.core.biz.model.ReturnT; -import com.xxl.job.core.context.XxlJobHelper; -import com.xxl.job.core.handler.annotation.XxlJob; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; - -/** - * XxlJob开发示例(Bean模式) - * - * 开发步骤: - * 1、任务开发:在Spring Bean实例中,开发Job方法; - * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 - * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; - * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; - */ -@Slf4j -@Component -public class DemoJobHandler { - - @XxlJob(value = "demoHandler") - public ReturnT execute(String param) throws Exception { - System.out.println("调度任务Demo执行"); - XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); - -// for (int i = 0; i < 5; i++) { -// XxlJobLogger.log("beat at:" + i); -// TimeUnit.SECONDS.sleep(2); -// } - return SUCCESS; - } - -} +//package com.casic.missiles.job.handler; +// +// +//import com.xxl.job.core.biz.model.ReturnT; +//import com.xxl.job.core.context.XxlJobHelper; +//import com.xxl.job.core.handler.annotation.XxlJob; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.stereotype.Component; +// +//import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; +// +///** +// * XxlJob开发示例(Bean模式) +// * +// * 开发步骤: +// * 1、任务开发:在Spring Bean实例中,开发Job方法; +// * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 +// * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; +// * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; +// */ +//@Slf4j +//@Component +//public class DemoJobHandler { +// +// @XxlJob(value = "demoHandler") +// public ReturnT execute(String param) throws Exception { +// System.out.println("调度任务Demo执行"); +// XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); +// +//// for (int i = 0; i < 5; i++) { +//// XxlJobLogger.log("beat at:" + i); +//// TimeUnit.SECONDS.sleep(2); +//// } +// return SUCCESS; +// } +// +//} diff --git a/casic-job/src/main/java/com/casic/missiles/job/handler/OfflineJobHandler.java b/casic-job/src/main/java/com/casic/missiles/job/handler/OfflineJobHandler.java index 1e6708f..276c5db 100644 --- a/casic-job/src/main/java/com/casic/missiles/job/handler/OfflineJobHandler.java +++ b/casic-job/src/main/java/com/casic/missiles/job/handler/OfflineJobHandler.java @@ -1,26 +1,26 @@ -package com.casic.missiles.job.handler; - -import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; -import com.xxl.job.core.context.XxlJobHelper; -import com.xxl.job.core.handler.annotation.XxlJob; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -@RequiredArgsConstructor -public class OfflineJobHandler { - - private final IAlarmRecordsService iAlarmRecordsService; - - /** - * 离线判断处理 - */ - @XxlJob("offlineJobHandler") - public void offlineJobHandler() { - XxlJobHelper.log("check offline"); - iAlarmRecordsService.processOffline(); - } - -} +//package com.casic.missiles.job.handler; +// +//import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +//import com.xxl.job.core.context.XxlJobHelper; +//import com.xxl.job.core.handler.annotation.XxlJob; +//import lombok.RequiredArgsConstructor; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.stereotype.Component; +// +//@Slf4j +//@Component +//@RequiredArgsConstructor +//public class OfflineJobHandler { +// +// private final IAlarmRecordsService iAlarmRecordsService; +// +// /** +// * 离线判断处理 +// */ +// @XxlJob("offlineJobHandler") +// public void offlineJobHandler() { +// XxlJobHelper.log("check offline"); +// iAlarmRecordsService.processOffline(); +// } +// +//} diff --git a/casic-job/src/main/java/com/casic/missiles/job/handler/SuspendExpireJobHandler.java b/casic-job/src/main/java/com/casic/missiles/job/handler/SuspendExpireJobHandler.java index 5ce8fc2..3610add 100644 --- a/casic-job/src/main/java/com/casic/missiles/job/handler/SuspendExpireJobHandler.java +++ b/casic-job/src/main/java/com/casic/missiles/job/handler/SuspendExpireJobHandler.java @@ -1,65 +1,65 @@ -package com.casic.missiles.job.handler; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.casic.missiles.modular.alarm.entity.AlarmRecords; -import com.casic.missiles.modular.alarm.entity.SuspendLog; -import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; -import com.casic.missiles.modular.alarm.service.IApprovalLogService; -import com.casic.missiles.modular.alarm.service.ISuspendLogService; -import com.xxl.job.core.context.XxlJobHelper; -import com.xxl.job.core.handler.annotation.XxlJob; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.time.LocalDate; -import java.time.ZoneId; -import java.time.ZonedDateTime; -import java.util.Date; -import java.util.List; -import java.util.stream.Collectors; - -@Slf4j -@Component -@RequiredArgsConstructor -public class SuspendExpireJobHandler { - - private final ISuspendLogService iSuspendLogService; - private final IAlarmRecordsService iAlarmRecordsService; - private final IApprovalLogService iApprovalLogService; - - /** - * 挂起时间到期处理 - */ - @XxlJob("suspendExpireJobHandler") - public void suspendExpireJobHandler() { - XxlJobHelper.log("check suspend expire"); -// Date today = getTodayStart(); - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.lt("EXPIRE_TIME", new Date()); - queryWrapper.eq("VALID", "1"); - List suspendLogList = iSuspendLogService.list(queryWrapper); - if (suspendLogList != null && suspendLogList.size() > 0) { - suspendLogList.forEach(suspendLog -> { - suspendLog.setValid("0"); - }); - iSuspendLogService.updateBatchById(suspendLogList); - //更新最新状态 - List alarmIds = suspendLogList.stream().map(SuspendLog::getAlarmId).collect(Collectors.toList()); - List alarmRecordsList = iAlarmRecordsService.changeProcessStatus(alarmIds); - //添加流转日志 - iApprovalLogService.saveSuspendLogs(alarmRecordsList); - } - } - - private Date getTodayStart() { - // 获取当天日期 - LocalDate today = LocalDate.now(); - // 当天日期与午夜时间的组合 - ZonedDateTime todayStart = today.atStartOfDay(ZoneId.systemDefault()); - - // 转换为java.util.Date - return Date.from(todayStart.toInstant()); - } - -} +//package com.casic.missiles.job.handler; +// +//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +//import com.casic.missiles.modular.alarm.entity.AlarmRecords; +//import com.casic.missiles.modular.alarm.entity.SuspendLog; +//import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +//import com.casic.missiles.modular.alarm.service.IApprovalLogService; +//import com.casic.missiles.modular.alarm.service.ISuspendLogService; +//import com.xxl.job.core.context.XxlJobHelper; +//import com.xxl.job.core.handler.annotation.XxlJob; +//import lombok.RequiredArgsConstructor; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.stereotype.Component; +// +//import java.time.LocalDate; +//import java.time.ZoneId; +//import java.time.ZonedDateTime; +//import java.util.Date; +//import java.util.List; +//import java.util.stream.Collectors; +// +//@Slf4j +//@Component +//@RequiredArgsConstructor +//public class SuspendExpireJobHandler { +// +// private final ISuspendLogService iSuspendLogService; +// private final IAlarmRecordsService iAlarmRecordsService; +// private final IApprovalLogService iApprovalLogService; +// +// /** +// * 挂起时间到期处理 +// */ +// @XxlJob("suspendExpireJobHandler") +// public void suspendExpireJobHandler() { +// XxlJobHelper.log("check suspend expire"); +//// Date today = getTodayStart(); +// QueryWrapper queryWrapper = new QueryWrapper<>(); +// queryWrapper.lt("EXPIRE_TIME", new Date()); +// queryWrapper.eq("VALID", "1"); +// List suspendLogList = iSuspendLogService.list(queryWrapper); +// if (suspendLogList != null && suspendLogList.size() > 0) { +// suspendLogList.forEach(suspendLog -> { +// suspendLog.setValid("0"); +// }); +// iSuspendLogService.updateBatchById(suspendLogList); +// //更新最新状态 +// List alarmIds = suspendLogList.stream().map(SuspendLog::getAlarmId).collect(Collectors.toList()); +// List alarmRecordsList = iAlarmRecordsService.changeProcessStatus(alarmIds); +// //添加流转日志 +// iApprovalLogService.saveSuspendLogs(alarmRecordsList); +// } +// } +// +// private Date getTodayStart() { +// // 获取当天日期 +// LocalDate today = LocalDate.now(); +// // 当天日期与午夜时间的组合 +// ZonedDateTime todayStart = today.atStartOfDay(ZoneId.systemDefault()); +// +// // 转换为java.util.Date +// return Date.from(todayStart.toInstant()); +// } +// +//} diff --git a/casic-public/src/main/java/com/casic/missiles/enums/AlarmEnum.java b/casic-public/src/main/java/com/casic/missiles/enums/AlarmEnum.java new file mode 100644 index 0000000..e73e469 --- /dev/null +++ b/casic-public/src/main/java/com/casic/missiles/enums/AlarmEnum.java @@ -0,0 +1,46 @@ +package com.casic.missiles.enums; + + +public enum AlarmEnum { + + + Sloping("Sloping", "倾斜报警"), + Destroy("Destroy", "破坏报警"), + DiscL("DiscL", "左侧断线报警"), + Leak("Leak", "泄露报警"), + DiscR("DiscR", "右侧断线报警"), + VibL("VibL", "左侧振动报警"), + VibR("VibR", "右侧振动报警"); +// VibL("自管", "1"), +// VibL("自管", "1"), +// VibL("自管", "1"); + + private String code; + private String value; + + AlarmEnum(String code, String value) { + this.code = code; + this.value = value; + } + + + public static String getValue(String code){ + for(AlarmEnum approvalStatusEnum :values()){ + if(approvalStatusEnum.code.equals(code)){ + return approvalStatusEnum.value; + } + } + return ""; + } + + + + public String getCode() { + return code; + } + + public String getValue() { + return value; + } + +} diff --git a/casic-public/src/main/java/com/casic/missiles/enums/DeviceDataEnum.java b/casic-public/src/main/java/com/casic/missiles/enums/DeviceDataEnum.java index 3fc6f08..13f5b23 100644 --- a/casic-public/src/main/java/com/casic/missiles/enums/DeviceDataEnum.java +++ b/casic-public/src/main/java/com/casic/missiles/enums/DeviceDataEnum.java @@ -4,11 +4,12 @@ public enum DeviceDataEnum { - DATA_GAS("燃气智能监测终端", "data_gas", "devcode,uptime,logtime,well_code", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime"), - DATA_GAS_LIQUID("燃气智能监测终端(一体化)", "data_gasliquid_gas", "devcode,uptime,logtime,well_code", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime"), - DATA_TUBE_OTHER("管网哨兵", "data_tube_other", "devcode,uptime,logtime,well_code", "DEVCODE,GASVAL, VBAT,SIN,RSRP,SINR,UPTIME,LOGTIME", "logtime"), - DATA_MONITOR_PIPE_OTHER("智能警示桩", "data_monitor_pipe_other", "devcode,uptime,logtime,well_number", "DEVCODE,TEMPERATURE,HUMIDITY,VBAT,PIPE_INCLINE_ALARM,PIPE_BREAK_ALARM,GAS_ALARM,LEFT_OFF_LINE_ALARM,LEFT_VIBRATE_ALARM,RIGHT_OFF_LINE_ALARM,RIGHT_VIBRATE_ALARM,PICTURE_ALARM,LEFT_GAS,RIGHT_GAS,LEFT_LENGTH,RIGHT_LENGTH,LOGTIME,UPTIME ", "logtime"), - DATA_PAN_GAS("场站监测云台", "data_pan_gas", "DEVICE_CODE,,logtime,LEDGER_CODE", "ID,LEDGER_NUMBER,DEVICE_CODE,CONCENTRATION,LOGTIME,DIRCETION,PITCH", "LOGTIME"); + DATA_GAS("燃气智能监测终端", "data_gas", "devcode,uptime,logtime,well_code", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime","cell,uptime"), + DATA_GAS_LIQUID("燃气智能监测终端(一体化)", "data_gasliquid_gas", "devcode,uptime,logtime,well_code", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime","cell,uptime"), + DATA_TUBE_OTHER("管网哨兵", "data_tube_other", "devcode,uptime,logtime,well_code", "DEVCODE,GASVAL, VBAT,SIN,RSRP,SINR,UPTIME,LOGTIME,sig,temp,SS_STATE as ssState", "logtime","VBAT,UPTIME"), + DATA_MONITOR_PIPE_OTHER("智能警示桩", "data_monitor_pipe_other", "devcode,uptime,logtime,well_number", "DEVCODE,TEMPERATURE,HUMIDITY,VBAT,PIPE_INCLINE_ALARM,PIPE_BREAK_ALARM,GAS_ALARM,LEFT_OFF_LINE_ALARM,LEFT_VIBRATE_ALARM,RIGHT_OFF_LINE_ALARM,RIGHT_VIBRATE_ALARM,PICTURE_ALARM,LEFT_GAS,RIGHT_GAS,LEFT_LENGTH,RIGHT_LENGTH,LOGTIME,UPTIME ", "logtime","VBAT as cell,uptime"), + DATA_PAN_GAS("场站监测云台", "data_pan_gas", "DEVICE_CODE,,logtime,LEDGER_CODE", "ID,LEDGER_NUMBER,DEVICE_CODE,CONCENTRATION,LOGTIME,DIRCETION,PITCH", "LOGTIME","CONCENTRATION as cell ,LOGTIME as uptime"), + DATA_GAS_OTHER("管网哨兵(一体化)", "data_gas_other", "devcode,uptime,logtime,well_code", "DEVCODE,GASVAL, VBAT,SIN,RSRP,SINR,UPTIME,LOGTIME,sig,temp,SS_STATE as ssState", "logtime","VBAT,UPTIME"); public static DeviceDataEnum typeOf(String type) { DeviceDataEnum deviceDataEnum = null; @@ -28,6 +29,9 @@ case "燃气智能监测终端(一体化)": deviceDataEnum = DATA_GAS_LIQUID; break; + case "管网哨兵(一体化)": + deviceDataEnum = DATA_GAS_OTHER; + break; default: deviceDataEnum = null; } @@ -39,13 +43,15 @@ String tableColumns; String orderColumn; String type; + String cellColumn; - DeviceDataEnum(String type, String tableName, String queryColumns, String tableColumns, String orderColumn) { + DeviceDataEnum(String type, String tableName, String queryColumns, String tableColumns, String orderColumn,String cellColumn) { this.type = type; this.queryColumns = queryColumns; this.tableName = tableName; this.tableColumns = tableColumns; this.orderColumn = orderColumn; + this.cellColumn = cellColumn; ; } @@ -98,4 +104,12 @@ public void setType(String type) { this.type = type; } + + public String getCellColumn() { + return cellColumn; + } + + public void setCellColumn(String cellColumn) { + this.cellColumn = cellColumn; + } } diff --git a/casic-public/src/main/java/com/casic/missiles/enums/DeviceTypeEnum.java b/casic-public/src/main/java/com/casic/missiles/enums/DeviceTypeEnum.java index b372b6b..11cd89a 100644 --- a/casic-public/src/main/java/com/casic/missiles/enums/DeviceTypeEnum.java +++ b/casic-public/src/main/java/com/casic/missiles/enums/DeviceTypeEnum.java @@ -20,7 +20,8 @@ KAD("点型可燃气体探测器", 16,"data_kad"), PANTILT("激光甲烷云台", 17,"data_pan_gas"), PRESSURE("压力监测终端", 18,"data_pressure"), - GasDector("点型可燃气体探测器", 19,"data_gas_dector"); + GasDector("点型可燃气体探测器", 19,"data_gas_dector"), + LGGasOther("管网哨兵(一体化)", 20,"data_gas_other"); // 成员变量 private String name; diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/sensorHub/resolver/ResponseResolver.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/sensorHub/resolver/ResponseResolver.java index 09029f4..fda60a0 100644 --- a/casic-rest-api/src/main/java/com/casic/missiles/modular/sensorHub/resolver/ResponseResolver.java +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/sensorHub/resolver/ResponseResolver.java @@ -3,10 +3,7 @@ import com.alibaba.fastjson.JSONObject; import com.casic.missiles.enums.DeviceTypeEnum; import com.casic.missiles.modular.data.service.IDataAbstractService; -import com.casic.missiles.modular.data.service.impl.DataGasServiceImpl; -import com.casic.missiles.modular.data.service.impl.DataGasliquidGasServiceImpl; -import com.casic.missiles.modular.data.service.impl.DataMonitorPipeOtherServiceImpl; -import com.casic.missiles.modular.data.service.impl.DataTubeOtherServiceImpl; +import com.casic.missiles.modular.data.service.impl.*; import com.casic.missiles.util.SpringContextUtil; import org.springframework.stereotype.Component; @@ -21,6 +18,7 @@ private static DataGasliquidGasServiceImpl dataGasliquidGasService = SpringContextUtil.getApplicationContext().getBean(DataGasliquidGasServiceImpl.class); private static DataTubeOtherServiceImpl dataTubeOtherService = SpringContextUtil.getApplicationContext().getBean(DataTubeOtherServiceImpl.class); private static DataMonitorPipeOtherServiceImpl dataMonitorPipeOtherService = SpringContextUtil.getApplicationContext().getBean(DataMonitorPipeOtherServiceImpl.class); + private static DataGasOtherServiceImpl dataGasOtherService = SpringContextUtil.getApplicationContext().getBean(DataGasOtherServiceImpl.class); private static Map abstractResponseHashMap = new HashMap(); static { @@ -32,6 +30,7 @@ abstractResponseHashMap.put(DeviceTypeEnum.TubeOther.name(), dataTubeOtherService); abstractResponseHashMap.put(DeviceTypeEnum.MonitorPipeOther.name(), dataMonitorPipeOtherService); abstractResponseHashMap.put(DeviceTypeEnum.LG.name(), dataGasliquidGasService); + abstractResponseHashMap.put(DeviceTypeEnum.LGGasOther.name(), dataGasOtherService); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java index 03cb6a3..2aead9a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -65,7 +65,7 @@ //策略配置 .strategyConfig(builder -> { - builder.addInclude("sync_log","sync_log_detail") // 设置需要生成的表名 + builder.addInclude("data_gas_other") // 设置需要生成的表名 .addTablePrefix() // 设置过滤表前缀 .entityBuilder() //实体类配置 .enableLombok() //使用lombok diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java new file mode 100644 index 0000000..fc881a1 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.data.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 外协管盯 前端控制器 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RestController +@RequestMapping("/system/dataGasOther") +public class DataGasOtherController { + +} + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java new file mode 100644 index 0000000..b5f3627 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.data.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 外协管盯 Mapper 接口 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Mapper +public interface DataGasOtherMapper extends BaseMapper { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml new file mode 100644 index 0000000..8ce1455 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID, DEVCODE, WELL_CODE, WELL_NUMBER, GASVAL, VBAT, BATSTA, SIN, RSRP, SINR, UPTIME, LOGTIME, SIG, TEMP, SS_STATE + + + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java new file mode 100644 index 0000000..53972ba --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java @@ -0,0 +1,94 @@ +package com.casic.missiles.modular.data.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 外协管盯 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Builder +@Data +@TableName("data_gas_other") +@ApiModel(value = "DataGasOther对象", description = "外协管盯") +public class DataGasOther implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId("ID") + private Long id; + + @ApiModelProperty("设备编号") + @TableField("DEVCODE") + private String devcode; + + @ApiModelProperty("点位编号") + @TableField("WELL_CODE") + private String wellCode; + + @ApiModelProperty("位号") + @TableField("WELL_NUMBER") + private String wellNumber; + + @ApiModelProperty("气体浓度采样值") + @TableField("GASVAL") + private String gasval; + + @ApiModelProperty("设备电池电压值(毫伏)") + @TableField("VBAT") + private String vbat; + + @ApiModelProperty("电池状态0 正常、 1 低电告警、2 关机") + @TableField("BATSTA") + private String batsta; + + @ApiModelProperty("接收信号强度等级") + @TableField("SIN") + private String sin; + + @ApiModelProperty("接收信号参考质量 服务小 区的 RSRP 值") + @TableField("RSRP") + private String rsrp; + + @ApiModelProperty("信噪比") + @TableField("SINR") + private String sinr; + + @ApiModelProperty("采集时间") + @TableField("UPTIME") + private Date uptime; + + @ApiModelProperty("上传时间") + @TableField("LOGTIME") + private Date logtime; + + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态,0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java index 86077b8..f4d4417 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java @@ -76,4 +76,17 @@ private Date logtime; + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态:0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java new file mode 100644 index 0000000..842ca0b --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.data.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.data.entity.DataGasOther; + +/** + *

+ * 外协管盯 服务类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +public interface IDataGasOtherService extends IService { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java new file mode 100644 index 0000000..4c660e9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java @@ -0,0 +1,226 @@ +package com.casic.missiles.modular.data.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.enums.DeviceTypeEnum; +import com.casic.missiles.enums.DictEnum; +import com.casic.missiles.modular.alarm.dto.AlarmDeviceRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.AlarmRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.BusAlarmLedgerDTO; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.data.dao.DataGasMapper; +import com.casic.missiles.modular.data.dao.DataGasOtherMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import com.casic.missiles.modular.data.entity.DataTubeOther; +import com.casic.missiles.modular.data.service.IDataAbstractService; +import com.casic.missiles.modular.data.service.IDataGasOtherService; +import com.casic.missiles.modular.data.service.ITrackLogService; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Optional; + +/** + *

+ * 外协管盯 服务实现类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RequiredArgsConstructor +@Service +public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { + + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + private final DataGasMapper dataGasMapper; + private final IAlarmRecordsService alarmRecordsService; + private final IAlarmRuleService alarmRuleService; + private final ITrackLogService iTrackLogService; + private final IBusDeviceService busDeviceService; + + @Override + public void process(String dataContent) { + + //解析数据+根据业务处理存储数据 + JSONObject json = JSONObject.parseObject(dataContent); + String devCode = json.get("devCode").toString(); + JSONObject jsonObject = json.getJSONObject("mBody"); + if (mType[0].equals(json.get("mType")) || mType[3].equals(json.get("mType"))) {//存储上报数据 + this.processNormalData(jsonObject, devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + this.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.TubeOther.name().equals(json.get("devType"))) { + if ("TubeOtherConfigSuccess".equals(jsonObject.get("bType"))) { +// deviceConfigManager.updateStatus(devCode); + } + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } else if (mType[4].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); +// imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; + try { + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); + } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + } + } + + @Transactional + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.getString("cell"); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = jsonObject.getJSONArray("datas"); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + String bfcf = busDeviceService.getBfcf(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).getString("gasval"); + String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); + String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); + String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataGasOther.builder() + .wellCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .wellNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .devcode(devCode) +// .cell(cell) + .gasval(gas) + .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime))) + .logtime(new Date()) + .vbat(vbat) + .batsta(batsta) + .rsrp(rsrp) + .sin(pci) + .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) + .build());//存储采集数据 + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) continue; + + //3.清除设备告警 + alarmRecordsService.cancelDeviceAlarm(devCode); + //4.存报警 + //若没绑定井,则不产生报警 + boolean alarmFlag = false; + if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { + //获取报警规则 + List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); + for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { + if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && + Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { + alarmFlag = true; + //写入报警 + //1、判断报警是否已存在 + if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.TubeOther.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); + //7.更新管线状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java index d248540..b33a1ee 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java @@ -91,7 +91,6 @@ } - public List getBusAlarmLedgerList(String devCode) { return this.dataGasMapper.getListByDevCode(devCode); } @@ -113,6 +112,13 @@ for (int i = 0; i < jsonArray.size(); i++) { try { String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) .findFirst(); @@ -175,18 +181,18 @@ alarmRecordsService.cancelDeviceAlarm(devCode); //4.存报警 //若没绑定井,则不产生报警 - boolean alarmFlag = false; + boolean alarmFlag = false; if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { //获取报警规则 List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { - alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); } break; } @@ -197,7 +203,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及设备状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新监测井状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java index e848fce..6297093 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java @@ -84,42 +84,78 @@ } - @Transactional - public void processAlarmData(JSONObject jsonObject, String devCode) { - JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + public void processEventAlarm(String devCode, String eventTypeCode, String logTime, String eventValue) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - //获取报警事件 - List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - - List busWellDTOList = dataGasMapper.getListByDevCode(devCode); - //若没绑定井,则不产生报警 - if (busWellDTOList != null && busWellDTOList.size() > 0) { - - for (int i = 0; i < jsonArray.size(); i++) { + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + //特殊处理消警 + if ("0".equals(eventValue)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, eventTypeCode); + } + return; } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> eventTypeCode.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 - if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + if (!alarmDeviceRuleResponseDTO.isPresent()) return; //1.查询是否已存在该类报警 - if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) return; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); - - + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + } + } + } + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + try { + String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmEventCode)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } } } } @@ -169,7 +205,76 @@ .rightVibrateAlarm(VibR) .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(uptime))) .logtime(new Date()) - .build());//存储采集数据 + .build()); + + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + ruleResponseDTOList.forEach(ruleResponseDTO -> { + + if ("Sloping".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Sloping)&&(!alarmRecordsService.isWatchAlarms(devCode,"Sloping"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Sloping", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Sloping)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Sloping"); + + } + } + if ("Destroy".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Destroy)&&(!alarmRecordsService.isWatchAlarms(devCode,"Destroy"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Destroy", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Destroy)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Destroy"); + + } + } + if ("Leak".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Leak)&&(!alarmRecordsService.isWatchAlarms(devCode,"Leak"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Leak", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Leak)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Leak"); + + } + } + if ("DiscL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscL)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscL"); + + } + } + if ("DiscR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscR)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscR"); + } + } + + if ("VibL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibL)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibL"); + } + } + if ("VibR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibR)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibR"); + } + } + }); + +// //处理报警事件 +// processEventAlarm(devCode,"Sloping",uptime,Sloping); +// processEventAlarm(devCode,"Destroy",uptime,Destroy); +// processEventAlarm(devCode,"Leak",uptime,Leak); +// processEventAlarm(devCode,"DiscL",uptime,DiscL); +// processEventAlarm(devCode,"DiscR",uptime,DiscR); +// processEventAlarm(devCode,"VibL",uptime,VibL); +// processEventAlarm(devCode,"VibR",uptime,VibR); + //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -197,7 +302,7 @@ if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && gas >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), gas)) { @@ -213,7 +318,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R,alarmFlag?"燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R, alarmFlag ? "燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java index f913775..895d201 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java @@ -89,6 +89,7 @@ String bfcf = busDeviceService.getBfcf(devCode); if (DictEnum.BF_ON.equals(bfcf)) { JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); //获取报警事件 List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); List busWellDTOList = dataGasMapper.getListByDevCode(devCode); @@ -96,25 +97,43 @@ if (busWellDTOList != null && busWellDTOList.size() > 0) { for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 if (!alarmDeviceRuleResponseDTO.isPresent()) continue; //1.查询是否已存在该类报警 if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { @@ -141,6 +160,9 @@ String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); gas = String.format("%.2f", Double.valueOf(gas)); //1.存数据 save(DataTubeOther.builder() @@ -156,6 +178,9 @@ .rsrp(rsrp) .sin(pci) .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) .build());//存储采集数据 //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -186,7 +211,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 98e736b..2288075 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -216,5 +216,15 @@ public ReturnDTO syncDeviceStatus() { return ReturnUtil.success(iBusDeviceService.syncDeviceStatus()); } + + @ApiOperation("根据闸井id获取设备信息") + @PostMapping("/getListByWellId") + @ResponseBody + public ReturnDTO getListByWellId(@RequestBody IdDTO idDTO) { + Assert.isFalse(ObjectUtil.isEmpty(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iBusDeviceService.getListByWellId(idDTO.getId())); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java index 72a2d84..d6d9743 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java @@ -85,6 +85,7 @@ return ReturnUtil.success(iBusLedgerService.detail(idDTO.getId())); } + /** * 同步三级部门 * diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java index 9e412d2..4316b56 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java @@ -1,22 +1,33 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.response.ErrorResponseData; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; +import com.casic.missiles.modular.device.dto.BusPositionImportDTO; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.ReturnUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataAccessException; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; /** @@ -40,8 +51,44 @@ @PostMapping("/addPosition") @ResponseBody public ReturnDTO addPosition(@RequestBody BusLedgerPipe busLedgerPipe) { + + List busLedgerPipeList = iBusLedgerPipeService.getListByNumber(busLedgerPipe.getTagNumber()); + if(busLedgerPipeList!=null&&busLedgerPipeList.size()>0){ + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE,"安装位号已存!!!"); + } + Long id =IdUtil.getSnowflake(1,2).nextId(); + busLedgerPipe.setId(id); iBusLedgerPipeService.save(busLedgerPipe); - return ReturnUtil.success(busLedgerPipe.getId()); + return ReturnUtil.success(id); + } + + @ApiOperation("批量导入") + @RequestMapping(value = "/batchImport", method = RequestMethod.POST) + @ResponseBody + public Object batchImport(@RequestParam("file") MultipartFile file) { + List results = new ArrayList<>(); + try { + results = this.importExcel(BusPositionImportDTO.class, file, null, null); + List list = iBusLedgerPipeService.addPositionBatch(results); + if (!CollectionUtil.isEmpty(list)) { + //获取校验报错信息 + return new ErrorResponseData(list.get(0)); + } + } catch (Exception e) { + return catchMybatisPlusException(e, "导入位置信息失败"); + } + return ResponseData.success(); + } + + private ResponseData catchMybatisPlusException(Exception e, String errorMsg) { + if (e instanceof DataAccessException) { + DataAccessException mybatisPlusException = (DataAccessException) e; + String message = mybatisPlusException.getRootCause().getMessage(); + if (message.contains("Duplicate entry '")) { + return new ErrorResponseData("安装位号重复:" + message.replaceAll("Duplicate entry '", "").replaceAll("' for key 'DEVCODE'", "")); + } + } + return new ErrorResponseData(errorMsg); } @ApiOperation("编辑点位") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java index d1e08a8..d938876 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java @@ -51,6 +51,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getOperatorName()), "CREATE_USER", request.getOperatorName()); queryWrapper.ge(ObjectUtil.isNotEmpty(request.getStartTime()), "START_TIME", request.getStartTime()); queryWrapper.le(ObjectUtil.isNotEmpty(request.getEndTime()), "END_TIME", request.getEndTime()); + queryWrapper.orderByDesc("START_TIME"); return ReturnUtil.success(super.packForBT(iSyncLogService.page(page, queryWrapper))); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java index 5ee5291..23ddee9 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java @@ -73,4 +73,12 @@ " where bd.DEVCODE= #{devcode} and bd.VALID=1 " + ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD asc") List getDeviceTypeRule(@Param("devcode") String devcode); + + + @Select("SELECT bd.* from bus_device bd " + + "left JOIN bus_device_ledger bl on bd.id= bl.DEVICE_ID and bl.VALID=1 " + + "LEFT JOIN bus_ledger_all_view bv on bv.id= bl.LEDGER_ID and bv.type= bl.TYPE and bv.VALID=1 " + + "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") + List getListByWellId(@Param("wellId") Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java index e1d16c4..a4c3f7a 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java @@ -37,7 +37,7 @@ @Select("SELECT b.ORG_ID,b.ORG_CODE,b.ORG_NAME,b.PARENT_ID FROM `bus_sync_org_relation` b WHERE b.DEL_FLAG =0 and b.PARENT_ID = #{syncId} ") List synDept(@Param("syncId") String syncId); - @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view ") + @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view where VALID=1") List getBusLedgers(); @Select("SELECT DEVCODE FROM `bus_device` where VALID>0 ") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml index 99ef10b..c6d1fff 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml @@ -29,6 +29,7 @@ bp.DEVICE_MODEL as deviceModel, bt.TYPE_NAME as typeName, + bp.DATA_SERVICE as deviceCategory, bm.`NAME` as manufactureName, bl.tagNumber as tagNumber, bl.id as ledgerId, @@ -81,6 +82,10 @@ and bd.LOGTIME #{request.logTime2} + + and bp.DATA_SERVICE =#{request.deviceCategory} + + ORDER BY bd.INSTALL_DATE DESC diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml index bdadb6a..d3f4684 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml @@ -40,7 +40,7 @@ `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + AND bdl.VALID = 1 JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -99,8 +99,8 @@ bm.`NAME` as manufactureName FROM `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE - LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID and bdl.type=blp.type + AND bdl.VALID = 1 LEFT JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -117,7 +117,9 @@ WITH station_temp as(SELECT bl.ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID FROM `bus_ledger` bl where bl.VALID=1 and bl.TYPE =2) - select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME from station_temp bl + select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME,bd.DEVCODE from station_temp bl left join bus_device_ledger bdl on bdl.LEDGER_ID = bl.ID and bdl.TYPE =2 and bdl.valid=1 left join bus_device bd on bd.id= bdl.DEVICE_ID and bd.VALID=1 order by bl.ID diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml index 7b92b04..1d97c64 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml @@ -184,7 +184,7 @@ WHERE EQ_LOCNO like 'N%' and - EQ_CATEGORY in (1,3) + EQ_CATEGORY in (1,2,3,5) diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java index 859cf08..143b42d 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java @@ -23,6 +23,9 @@ @ApiModelProperty("设备类型id") private Long typeId; + @ApiModelProperty("产品名称") + private String productName; + @ApiModelProperty("指令集合") private List commandConfigList; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java index 646610b..2cb5894 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("最新上传结束时间") private String logTime2; + + @ApiModelProperty("设备类别(0:自有设备,1:数据服务)") + private String deviceCategory; } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java index 8c95537..28b30fa 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java @@ -44,6 +44,9 @@ @ExcelProperty("关联管线") private String pipeCode; + @ExcelProperty("监测类型") + private String monitorType; + private String watchObject; private Long deviceType; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java index 0980c34..ac5daf0 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java @@ -24,4 +24,7 @@ @ApiModelProperty("详细位置") private String position; + @ApiModelProperty("1:其他,3:管线") + private String type; + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java new file mode 100644 index 0000000..bce7ebd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.device.dto; + + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class BusPositionImportDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + + @ExcelProperty("管线编号") + private String pipeCode; + + @ExcelProperty("安装位号") + private String tagNumber; + + @ExcelProperty("经度(高德)") + private String lngGaode; + + @ExcelProperty("纬度(高德)") + private String latGaode; + + @ExcelProperty("详细位置") + private String position; + + @ExcelProperty("管理单位") + private Long deptid; + + @ExcelProperty("位置类别") + private String type; + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java index 58faa0e..d72ae78 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java @@ -16,13 +16,13 @@ private String deviceId; //移动命令:left right up down left_up left_down right_up right_down GOTO_PRESET - @ApiModelProperty("移动命令") + @ApiModelProperty("移动命令(left right up down left_up left_down right_up right_down)") private String command; - @ApiModelProperty("速度") + @ApiModelProperty("速度,一般传100") private String speed; - @ApiModelProperty("启停命令") + @ApiModelProperty("启停命令(0:开始,1:结束)") private String cameraAction; @ApiModelProperty("预置点编号") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java index b4ec73c..5a3d0b0 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java @@ -66,7 +66,7 @@ private String powerSupplyMode; - @ApiModelProperty("是否结束数据服务") + @ApiModelProperty("是否结束数据服务(1:是,0:否)") @TableField("DATA_SERVICE") private String dataService; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java index 1184995..407e3c1 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java @@ -193,10 +193,14 @@ @TableField(exist = false) private String bfztName; + @ApiModelProperty("设备类别(0:自有设备,1:数据服务)") + @TableField(exist = false) + private String deviceCategory; + public BusDevice() { } - public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds) { + public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds, String monitorType) { this.devcode = devcode; this.deviceType = deviceType; this.productId = productId; @@ -204,6 +208,7 @@ this.installDate = installDate; this.watchObject = watchObject; this.ledgerIds = ledgerIds; + this.monitorType = monitorType; } public static List convertDeviceList(List dtoList) { @@ -227,7 +232,8 @@ deviceImportDTO.getValid(), deviceImportDTO.getInstallDate(), deviceImportDTO.getWatchObject(), - deviceImportDTO.getLedgerIds())); + deviceImportDTO.getLedgerIds(), + deviceImportDTO.getMonitorType())); }); return busDeviceList; } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java index 12b52de..1ac8455 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java @@ -1,16 +1,20 @@ package com.casic.missiles.modular.device.entity; +import cn.hutool.core.util.IdUtil; 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 com.casic.missiles.modular.device.dto.BusPositionImportDTO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import java.io.Serializable; +import java.util.ArrayList; import java.util.Date; +import java.util.List; /** *

@@ -29,7 +33,7 @@ private static final long serialVersionUID = 1L; @ApiModelProperty("主键") - @TableId(value = "ID", type = IdType.AUTO) +// @TableId(value = "ID", type = IdType.AUTO) private Long id; @ApiModelProperty("编号") @@ -60,6 +64,10 @@ @TableField("DEPTID") private Long deptid; + @ApiModelProperty("类别(1:其他,3:管线)") + @TableField("`TYPE`") + private String type; + @ApiModelProperty("责任部门") @TableField("RESPONSIBLE_DEPT") private Long responsibleDept; @@ -110,9 +118,10 @@ public BusLedgerPipe() { } - public BusLedgerPipe(String pipeCode, String ledgerName, String tagNumber, + public BusLedgerPipe(Long id,String pipeCode, String ledgerName, String tagNumber, String lngGaode, String latGaode, String position, - Long deptid, String devcode) { + Long deptid, String devcode, String type) { + this.id=id; this.pipeCode = pipeCode; this.ledgerName = ledgerName; this.tagNumber = tagNumber; @@ -121,5 +130,26 @@ this.position = position; this.deptid = deptid; this.devcode = devcode; + this.type = type; } + + public static List convertDeviceList(List dtoList) { + + + List busDeviceList = new ArrayList<>(); + dtoList.forEach(positionImportDTO -> { + + busDeviceList.add(new BusLedgerPipe(IdUtil.getSnowflake(1,2).nextId(),positionImportDTO.getPipeCode(), + positionImportDTO.getTagNumber(), + positionImportDTO.getTagNumber(), + positionImportDTO.getLngGaode(), + positionImportDTO.getLatGaode(), + positionImportDTO.getPosition(), + positionImportDTO.getDeptid(), + "", + positionImportDTO.getType())); + }); + return busDeviceList; + } + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java index aaaa409..63c0576 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java @@ -52,4 +52,8 @@ List getDeviceRule(String devcode); + List getDevicesByCodes(List devcodes); + + List getListByWellId(Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java index 14f6a93..8692383 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java @@ -2,11 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; -import com.casic.missiles.core.datascope.DataScope; -import com.casic.missiles.modular.device.dto.BusLedgerPipeMonitorRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeResponseDTO; -import com.casic.missiles.modular.device.dto.MonitorDataRequestDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import java.util.List; @@ -26,17 +22,21 @@ Page monitorPipePageList(Page page, BusLedgerPipeMonitorRequestDTO request); - BusLedgerPipeResponseDTO detail(Long id,String devcode); + BusLedgerPipeResponseDTO detail(Long id, String devcode); - List> watchDataByPipe(MonitorDataRequestDTO requestDTO); + List> watchDataByPipe(MonitorDataRequestDTO requestDTO); - List> pipeList(); + List> pipeList(); - List> deviceList(); + List> deviceList(); BusLedgerPipe saveBusLedgerPipe(BusLedgerPipe busLedgerPipe); Boolean updateMonitorStatus(List tagNumbers); + List addPositionBatch(List results); + + List getListByNumber(String tagNumber); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java index 66ed812..ad72230 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java @@ -12,9 +12,12 @@ import com.casic.missiles.modular.device.dto.BusConfigOtherDTO; import com.casic.missiles.modular.device.dto.BusConfigRequestDTO; import com.casic.missiles.modular.device.entity.BusConfig; +import com.casic.missiles.modular.device.entity.BusDevice; import com.casic.missiles.modular.device.service.IBusConfigService; +import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.HttpClientUtils; import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -22,6 +25,9 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.LinkedBlockingDeque; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; /** *

@@ -36,6 +42,11 @@ public class BusConfigServiceImpl extends ServiceImpl implements IBusConfigService { private final AbstractPermissionContext abstractPermissionContext; + private final IBusDeviceService iBusDeviceService; + private final ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(3, 6, 60, TimeUnit.SECONDS, new LinkedBlockingDeque<>(10)); + + @Value("${casic.brSendConfigUrl}") + private String brSendConfigUrl; @Transactional @Override @@ -105,6 +116,42 @@ .operator(user != null ? user.getId() : null) .operatorName(user != null ? user.getName() : "").build()); }); + + + threadPoolExecutor.execute( + () -> { + //发送第三方下发: + if (busConfigOtherDTO.getProductName().contains("管网哨兵")) { + List busDeviceList = iBusDeviceService.getDevicesByCodes(devcodes); + for (BusDevice busDevice : busDeviceList) { + if (ObjectUtil.isAllNotEmpty(busDevice.getNbProductId(), busDevice.getNbDeviceId())) { + Map commandMap = new HashMap<>(); + commandMap.put("productId", busDevice.getNbProductId()); + commandMap.put("devCode", busDevice.getDevcode()); + commandMap.put("deviceId", busDevice.getNbDeviceId()); + commandMap.put("cmdList", busConfigOtherDTO.getCommandConfigList()); + HttpClientUtils.post(brSendConfigUrl+"/tube/config/send", JSON.toJSONString(commandMap)); + } + } + } else if (busConfigOtherDTO.getProductName().contains("智能警示桩")) { + + List busDeviceList = iBusDeviceService.getDevicesByCodes(devcodes); + for (BusDevice busDevice : busDeviceList) { + if (ObjectUtil.isAllNotEmpty(busDevice.getNbProductId(), busDevice.getNbDeviceId())) { + Map commandMap = new HashMap<>(); + commandMap.put("productId", busDevice.getNbProductId()); + commandMap.put("devCode", busDevice.getDevcode()); + commandMap.put("deviceId", busDevice.getNbDeviceId()); + commandMap.put("cmdList", busConfigOtherDTO.getCommandConfigList()); + HttpClientUtils.post(brSendConfigUrl+"/sentinel/config/send", JSON.toJSONString(commandMap)); + } + } + + } + } + ); + + return this.saveBatch(busConfigs); // List> mapList = new ArrayList<>(); // Map commandMap = new HashMap<>(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java index 60d15e5..bae6902 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java @@ -3,6 +3,7 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -80,6 +81,7 @@ @Override public Page listPage(Page page, BusDeviceDTO request) { + page.setOptimizeCountSql(false); Page busDevicePage = this.baseMapper.pageList(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List busDeviceList = busDevicePage.getRecords(); busDeviceList.forEach(busDevice -> { @@ -227,7 +229,7 @@ if (deviceDataEnum.getTableColumns().contains("cell")) { String[] queryColumns = deviceDataEnum.getQueryColumns().split(",", 4); resultMap = this.baseMapper.cellAnalysis(deviceDataEnum.getTableName(), - "cell,uptime", + deviceDataEnum.getCellColumn(), queryColumns[0], queryColumns[1], deviceDataEnum.getOrderColumn(), @@ -265,14 +267,13 @@ } else { List busDeviceLedgers = busDeviceLedgerService.getListByDeviceId(busDevice.getId()); //没绑定关系,先绑定 - if (ObjectUtil.isNotEmpty(busDeviceLedgers)) { + if (busDeviceLedgers == null || busDeviceLedgers.size() < 1) { busDeviceLedgerService.saveDeviceLedger(busDevice.getId(), busDevice.getLedgerIds(), busDevice.getWatchObject()); } else { //已绑定,判断是否位置变了 List ledgerIdsPre = busDeviceLedgers.stream().map(BusDeviceLedger::getLedgerId).collect(Collectors.toList()); if (ledgerIds.containsAll(ledgerIdsPre) && ledgerIdsPre.containsAll(ledgerIds)) { } else { - busDeviceLedgerService.deleteDeviceLedgers(Arrays.asList(busDevice.getId())); busDeviceLedgerService.saveDeviceLedger(busDevice.getId(), busDevice.getLedgerIds(), busDevice.getWatchObject()); } } @@ -304,6 +305,8 @@ List codeList = iBusLedgerService.getCodeLists(); //获取管线编号 List pipeCodeList = iBusLedgerService.getPipeCodeList(); + List pipeList = new ArrayList<>(); + final Integer[] index = {1}; results.forEach(deviceImportDTO -> { index[0]++; @@ -357,22 +360,16 @@ return; } //新增点位 - if ("3".equals(deviceImportDTO.getWatchObject())) { + if ("3".equals(deviceImportDTO.getWatchObject()) || "1".equals(deviceImportDTO.getWatchObject())) { //toDo:安装位号一致,入一次即可 //为管线 - BusLedgerPipe busLedgerPipe = new BusLedgerPipe(deviceImportDTO.getPipeCode(), deviceImportDTO.getTagNumber(), + Long pipeLedgerId = IdUtil.getSnowflake(1, 2).nextId(); + BusLedgerPipe busLedgerPipe = new BusLedgerPipe(pipeLedgerId, deviceImportDTO.getPipeCode(), deviceImportDTO.getTagNumber(), deviceImportDTO.getTagNumber(), deviceImportDTO.getLng(), deviceImportDTO.getLat(), - deviceImportDTO.getPosition(), deviceImportDTO.getDeptid(), deviceImportDTO.getDevCode()); - busLedgerPipe = iBusLedgerPipeService.saveBusLedgerPipe(busLedgerPipe); - deviceImportDTO.setLedgerIds(Arrays.asList(busLedgerPipe.getId())); - }else if("1".equals(deviceImportDTO.getWatchObject())){ - //新增闸井 - BusLedger busLedger = new BusLedger(deviceImportDTO.getTagNumber(), - deviceImportDTO.getTagNumber(),deviceImportDTO.getTagNumber(), - deviceImportDTO.getLng(),deviceImportDTO.getLat(),deviceImportDTO.getPosition(), - deviceImportDTO.getDeptid()); - this.iBusLedgerService.save(busLedger); - deviceImportDTO.setLedgerIds(Arrays.asList(busLedger.getId())); + deviceImportDTO.getPosition(), deviceImportDTO.getDeptid(), deviceImportDTO.getDevCode(), deviceImportDTO.getWatchObject()); +// busLedgerPipe = iBusLedgerPipeService.saveBusLedgerPipe(busLedgerPipe); + pipeList.add(busLedgerPipe); + deviceImportDTO.setLedgerIds(Arrays.asList(pipeLedgerId)); } } @@ -383,6 +380,10 @@ return list; } + if (pipeList != null && pipeList.size() > 0) { + iBusLedgerPipeService.saveBatch(pipeList); + } + List busDeviceList = BusDevice.convertDeviceList(results); //保存设备信息 @@ -514,7 +515,7 @@ } -// @Cacheable(value = "alarmRuleCache", key = "#devcode") + // @Cacheable(value = "alarmRuleCache", key = "#devcode") @Override public List getDeviceRule(String devcode) { List alarmRuleValueList = this.baseMapper.getSpecialDeviceRule(devcode); @@ -523,4 +524,18 @@ } return alarmRuleValueList; } + + + @Override + public List getDevicesByCodes(List devcodes) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("DEVCODE", devcodes); + queryWrapper.eq("VALID", "1"); + return this.baseMapper.selectList(queryWrapper); + } + + @Override + public List getListByWellId(Long wellId) { + return this.baseMapper.getListByWellId(wellId); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java index 5073159..7f8bfdc 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service.impl; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -12,11 +13,8 @@ import com.casic.missiles.enums.DeviceDataEnum; import com.casic.missiles.modular.device.dao.BusDeviceMapper; import com.casic.missiles.modular.device.dao.BusLedgerPipeMapper; -import com.casic.missiles.modular.device.dto.BusLedgerPipeMonitorRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeResponseDTO; -import com.casic.missiles.modular.device.dto.MonitorDataRequestDTO; -import com.casic.missiles.modular.device.entity.BusLedgerPipe; +import com.casic.missiles.modular.device.dto.*; +import com.casic.missiles.modular.device.entity.*; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.server.CommonServer; @@ -24,11 +22,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.stream.Collectors; /** *

@@ -63,6 +60,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getPipeCode()), "PIPE_CODE", request.getPipeCode()); queryWrapper.like(ObjectUtil.isNotEmpty(request.getPosition()), "POSITION", request.getPosition()); queryWrapper.in(ObjectUtil.isNotEmpty(deptIds), "DEPTID", deptIds); + queryWrapper.eq(ObjectUtil.isNotEmpty(request.getType()), "TYPE", request.getType()); Page pipePage = this.page(page, queryWrapper); List pipeList = pipePage.getRecords(); pipeList.forEach(pipe -> { @@ -156,6 +154,12 @@ return busLedgerPipe; } + public List getList() { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("VALID", "1"); + return this.baseMapper.selectList(queryWrapper); + } + @Override public Boolean updateMonitorStatus(List tagNumbers) { UpdateWrapper updateWrapper = new UpdateWrapper<>(); @@ -163,4 +167,43 @@ updateWrapper.set("MONITOR_STATE", "3"); return this.update(updateWrapper); } + + @Transactional + @Override + public List addPositionBatch(List results) { + List list = new ArrayList<>(); + if (!CollectionUtil.isEmpty(results)) { + List busLedgerPipeList = this.getList(); + List tagCodes = busLedgerPipeList.stream().map(BusLedgerPipe::getTagNumber).collect(Collectors.toList()); + final Integer[] index = {1}; + results.forEach(busPositionImportDTO -> { + index[0]++; + //设备编号查重 + if (tagCodes.contains(busPositionImportDTO.getTagNumber())) { + list.add("第" + index[0] + "行,安装位号已存在!"); + return; + } + + }); + if (CollectionUtil.isNotEmpty(list)) { + return list; + } + List busDeviceList = BusLedgerPipe.convertDeviceList(results); + + //保存点位信息 + this.saveBatch(busDeviceList); + + } else { + list.add("导入数据不能为空"); + } + return list; + } + + @Override + public List getListByNumber(String tagNumber) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("VALID", "1"); + queryWrapper.eq("TAG_NUMBER", tagNumber); + return this.baseMapper.selectList(queryWrapper); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java index 5798675..ec2b3f5 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.modular.device.dao.SyncLogMapper; import com.casic.missiles.modular.device.entity.SyncLog; import com.casic.missiles.modular.device.service.ISyncLogDetailService; @@ -39,7 +40,8 @@ syncLog.setUpdateCount(updateCount); syncLog.setAddCount(addCount); syncLog.setDeleteCount(deleteCount); - syncLog.setCreateUser(permissionContext.getAuthService().getLoginUser().getName()); + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + syncLog.setCreateUser(null == authUser ? "admin" : authUser.getName()); return this.baseMapper.insert(syncLog) > 0 ? true : false; } diff --git a/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java index b80c202..6be2b47 100644 --- a/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java +++ b/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -1,56 +1,56 @@ -package com.casic.missiles.job.config; - -import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - - -@Slf4j -@Configuration -@Data -@ConditionalOnExpression("T(org.apache.commons.lang3.StringUtils).isNotEmpty('${xxl.job.admin.addresses}')") -public class XxlJobConfig { - @Value("${xxl.job.admin.addresses}") - private String adminAddresses; - - @Value("${xxl.job.accessToken}") - private String accessToken; - - @Value("${xxl.job.executor.appname}") - private String appname; - -// @Value("${xxl.job.executor.address}") -// private String address; - - @Value("${xxl.job.executor.ip}") - private String ip; - - @Value("${xxl.job.executor.port}") - private int port; - - @Value("${xxl.job.executor.logpath}") - private String logPath; - - @Value("${xxl.job.executor.logretentiondays}") - private int logRetentionDays; - - @Bean - public XxlJobSpringExecutor xxlJobExecutor() { - log.info(">>>>>>>>>>> xxl-job config init."); - XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); - xxlJobSpringExecutor.setAdminAddresses(adminAddresses); - xxlJobSpringExecutor.setAppname(appname); -// xxlJobSpringExecutor.setAddress(address); - xxlJobSpringExecutor.setIp(ip); - xxlJobSpringExecutor.setPort(port); - xxlJobSpringExecutor.setAccessToken(accessToken); - xxlJobSpringExecutor.setLogPath(logPath); - xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); - - return xxlJobSpringExecutor; - } -} +//package com.casic.missiles.job.config; +// +//import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +//import lombok.Data; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.beans.factory.annotation.Value; +//import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; +//import org.springframework.context.annotation.Bean; +//import org.springframework.context.annotation.Configuration; +// +// +//@Slf4j +//@Configuration +//@Data +//@ConditionalOnExpression("T(org.apache.commons.lang3.StringUtils).isNotEmpty('${xxl.job.admin.addresses}')") +//public class XxlJobConfig { +// @Value("${xxl.job.admin.addresses}") +// private String adminAddresses; +// +// @Value("${xxl.job.accessToken}") +// private String accessToken; +// +// @Value("${xxl.job.executor.appname}") +// private String appname; +// +//// @Value("${xxl.job.executor.address}") +//// private String address; +// +// @Value("${xxl.job.executor.ip}") +// private String ip; +// +// @Value("${xxl.job.executor.port}") +// private int port; +// +// @Value("${xxl.job.executor.logpath}") +// private String logPath; +// +// @Value("${xxl.job.executor.logretentiondays}") +// private int logRetentionDays; +// +// @Bean +// public XxlJobSpringExecutor xxlJobExecutor() { +// log.info(">>>>>>>>>>> xxl-job config init."); +// XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); +// xxlJobSpringExecutor.setAdminAddresses(adminAddresses); +// xxlJobSpringExecutor.setAppname(appname); +//// xxlJobSpringExecutor.setAddress(address); +// xxlJobSpringExecutor.setIp(ip); +// xxlJobSpringExecutor.setPort(port); +// xxlJobSpringExecutor.setAccessToken(accessToken); +// xxlJobSpringExecutor.setLogPath(logPath); +// xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); +// +// return xxlJobSpringExecutor; +// } +//} diff --git a/casic-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java index 798424c..3785003 100644 --- a/casic-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java +++ b/casic-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -1,37 +1,37 @@ -package com.casic.missiles.job.handler; - - -import com.xxl.job.core.biz.model.ReturnT; -import com.xxl.job.core.context.XxlJobHelper; -import com.xxl.job.core.handler.annotation.XxlJob; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; - -/** - * XxlJob开发示例(Bean模式) - * - * 开发步骤: - * 1、任务开发:在Spring Bean实例中,开发Job方法; - * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 - * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; - * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; - */ -@Slf4j -@Component -public class DemoJobHandler { - - @XxlJob(value = "demoHandler") - public ReturnT execute(String param) throws Exception { - System.out.println("调度任务Demo执行"); - XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); - -// for (int i = 0; i < 5; i++) { -// XxlJobLogger.log("beat at:" + i); -// TimeUnit.SECONDS.sleep(2); -// } - return SUCCESS; - } - -} +//package com.casic.missiles.job.handler; +// +// +//import com.xxl.job.core.biz.model.ReturnT; +//import com.xxl.job.core.context.XxlJobHelper; +//import com.xxl.job.core.handler.annotation.XxlJob; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.stereotype.Component; +// +//import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; +// +///** +// * XxlJob开发示例(Bean模式) +// * +// * 开发步骤: +// * 1、任务开发:在Spring Bean实例中,开发Job方法; +// * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 +// * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; +// * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; +// */ +//@Slf4j +//@Component +//public class DemoJobHandler { +// +// @XxlJob(value = "demoHandler") +// public ReturnT execute(String param) throws Exception { +// System.out.println("调度任务Demo执行"); +// XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); +// +//// for (int i = 0; i < 5; i++) { +//// XxlJobLogger.log("beat at:" + i); +//// TimeUnit.SECONDS.sleep(2); +//// } +// return SUCCESS; +// } +// +//} diff --git a/casic-job/src/main/java/com/casic/missiles/job/handler/OfflineJobHandler.java b/casic-job/src/main/java/com/casic/missiles/job/handler/OfflineJobHandler.java index 1e6708f..276c5db 100644 --- a/casic-job/src/main/java/com/casic/missiles/job/handler/OfflineJobHandler.java +++ b/casic-job/src/main/java/com/casic/missiles/job/handler/OfflineJobHandler.java @@ -1,26 +1,26 @@ -package com.casic.missiles.job.handler; - -import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; -import com.xxl.job.core.context.XxlJobHelper; -import com.xxl.job.core.handler.annotation.XxlJob; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -@RequiredArgsConstructor -public class OfflineJobHandler { - - private final IAlarmRecordsService iAlarmRecordsService; - - /** - * 离线判断处理 - */ - @XxlJob("offlineJobHandler") - public void offlineJobHandler() { - XxlJobHelper.log("check offline"); - iAlarmRecordsService.processOffline(); - } - -} +//package com.casic.missiles.job.handler; +// +//import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +//import com.xxl.job.core.context.XxlJobHelper; +//import com.xxl.job.core.handler.annotation.XxlJob; +//import lombok.RequiredArgsConstructor; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.stereotype.Component; +// +//@Slf4j +//@Component +//@RequiredArgsConstructor +//public class OfflineJobHandler { +// +// private final IAlarmRecordsService iAlarmRecordsService; +// +// /** +// * 离线判断处理 +// */ +// @XxlJob("offlineJobHandler") +// public void offlineJobHandler() { +// XxlJobHelper.log("check offline"); +// iAlarmRecordsService.processOffline(); +// } +// +//} diff --git a/casic-job/src/main/java/com/casic/missiles/job/handler/SuspendExpireJobHandler.java b/casic-job/src/main/java/com/casic/missiles/job/handler/SuspendExpireJobHandler.java index 5ce8fc2..3610add 100644 --- a/casic-job/src/main/java/com/casic/missiles/job/handler/SuspendExpireJobHandler.java +++ b/casic-job/src/main/java/com/casic/missiles/job/handler/SuspendExpireJobHandler.java @@ -1,65 +1,65 @@ -package com.casic.missiles.job.handler; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.casic.missiles.modular.alarm.entity.AlarmRecords; -import com.casic.missiles.modular.alarm.entity.SuspendLog; -import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; -import com.casic.missiles.modular.alarm.service.IApprovalLogService; -import com.casic.missiles.modular.alarm.service.ISuspendLogService; -import com.xxl.job.core.context.XxlJobHelper; -import com.xxl.job.core.handler.annotation.XxlJob; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.time.LocalDate; -import java.time.ZoneId; -import java.time.ZonedDateTime; -import java.util.Date; -import java.util.List; -import java.util.stream.Collectors; - -@Slf4j -@Component -@RequiredArgsConstructor -public class SuspendExpireJobHandler { - - private final ISuspendLogService iSuspendLogService; - private final IAlarmRecordsService iAlarmRecordsService; - private final IApprovalLogService iApprovalLogService; - - /** - * 挂起时间到期处理 - */ - @XxlJob("suspendExpireJobHandler") - public void suspendExpireJobHandler() { - XxlJobHelper.log("check suspend expire"); -// Date today = getTodayStart(); - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.lt("EXPIRE_TIME", new Date()); - queryWrapper.eq("VALID", "1"); - List suspendLogList = iSuspendLogService.list(queryWrapper); - if (suspendLogList != null && suspendLogList.size() > 0) { - suspendLogList.forEach(suspendLog -> { - suspendLog.setValid("0"); - }); - iSuspendLogService.updateBatchById(suspendLogList); - //更新最新状态 - List alarmIds = suspendLogList.stream().map(SuspendLog::getAlarmId).collect(Collectors.toList()); - List alarmRecordsList = iAlarmRecordsService.changeProcessStatus(alarmIds); - //添加流转日志 - iApprovalLogService.saveSuspendLogs(alarmRecordsList); - } - } - - private Date getTodayStart() { - // 获取当天日期 - LocalDate today = LocalDate.now(); - // 当天日期与午夜时间的组合 - ZonedDateTime todayStart = today.atStartOfDay(ZoneId.systemDefault()); - - // 转换为java.util.Date - return Date.from(todayStart.toInstant()); - } - -} +//package com.casic.missiles.job.handler; +// +//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +//import com.casic.missiles.modular.alarm.entity.AlarmRecords; +//import com.casic.missiles.modular.alarm.entity.SuspendLog; +//import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +//import com.casic.missiles.modular.alarm.service.IApprovalLogService; +//import com.casic.missiles.modular.alarm.service.ISuspendLogService; +//import com.xxl.job.core.context.XxlJobHelper; +//import com.xxl.job.core.handler.annotation.XxlJob; +//import lombok.RequiredArgsConstructor; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.stereotype.Component; +// +//import java.time.LocalDate; +//import java.time.ZoneId; +//import java.time.ZonedDateTime; +//import java.util.Date; +//import java.util.List; +//import java.util.stream.Collectors; +// +//@Slf4j +//@Component +//@RequiredArgsConstructor +//public class SuspendExpireJobHandler { +// +// private final ISuspendLogService iSuspendLogService; +// private final IAlarmRecordsService iAlarmRecordsService; +// private final IApprovalLogService iApprovalLogService; +// +// /** +// * 挂起时间到期处理 +// */ +// @XxlJob("suspendExpireJobHandler") +// public void suspendExpireJobHandler() { +// XxlJobHelper.log("check suspend expire"); +//// Date today = getTodayStart(); +// QueryWrapper queryWrapper = new QueryWrapper<>(); +// queryWrapper.lt("EXPIRE_TIME", new Date()); +// queryWrapper.eq("VALID", "1"); +// List suspendLogList = iSuspendLogService.list(queryWrapper); +// if (suspendLogList != null && suspendLogList.size() > 0) { +// suspendLogList.forEach(suspendLog -> { +// suspendLog.setValid("0"); +// }); +// iSuspendLogService.updateBatchById(suspendLogList); +// //更新最新状态 +// List alarmIds = suspendLogList.stream().map(SuspendLog::getAlarmId).collect(Collectors.toList()); +// List alarmRecordsList = iAlarmRecordsService.changeProcessStatus(alarmIds); +// //添加流转日志 +// iApprovalLogService.saveSuspendLogs(alarmRecordsList); +// } +// } +// +// private Date getTodayStart() { +// // 获取当天日期 +// LocalDate today = LocalDate.now(); +// // 当天日期与午夜时间的组合 +// ZonedDateTime todayStart = today.atStartOfDay(ZoneId.systemDefault()); +// +// // 转换为java.util.Date +// return Date.from(todayStart.toInstant()); +// } +// +//} diff --git a/casic-public/src/main/java/com/casic/missiles/enums/AlarmEnum.java b/casic-public/src/main/java/com/casic/missiles/enums/AlarmEnum.java new file mode 100644 index 0000000..e73e469 --- /dev/null +++ b/casic-public/src/main/java/com/casic/missiles/enums/AlarmEnum.java @@ -0,0 +1,46 @@ +package com.casic.missiles.enums; + + +public enum AlarmEnum { + + + Sloping("Sloping", "倾斜报警"), + Destroy("Destroy", "破坏报警"), + DiscL("DiscL", "左侧断线报警"), + Leak("Leak", "泄露报警"), + DiscR("DiscR", "右侧断线报警"), + VibL("VibL", "左侧振动报警"), + VibR("VibR", "右侧振动报警"); +// VibL("自管", "1"), +// VibL("自管", "1"), +// VibL("自管", "1"); + + private String code; + private String value; + + AlarmEnum(String code, String value) { + this.code = code; + this.value = value; + } + + + public static String getValue(String code){ + for(AlarmEnum approvalStatusEnum :values()){ + if(approvalStatusEnum.code.equals(code)){ + return approvalStatusEnum.value; + } + } + return ""; + } + + + + public String getCode() { + return code; + } + + public String getValue() { + return value; + } + +} diff --git a/casic-public/src/main/java/com/casic/missiles/enums/DeviceDataEnum.java b/casic-public/src/main/java/com/casic/missiles/enums/DeviceDataEnum.java index 3fc6f08..13f5b23 100644 --- a/casic-public/src/main/java/com/casic/missiles/enums/DeviceDataEnum.java +++ b/casic-public/src/main/java/com/casic/missiles/enums/DeviceDataEnum.java @@ -4,11 +4,12 @@ public enum DeviceDataEnum { - DATA_GAS("燃气智能监测终端", "data_gas", "devcode,uptime,logtime,well_code", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime"), - DATA_GAS_LIQUID("燃气智能监测终端(一体化)", "data_gasliquid_gas", "devcode,uptime,logtime,well_code", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime"), - DATA_TUBE_OTHER("管网哨兵", "data_tube_other", "devcode,uptime,logtime,well_code", "DEVCODE,GASVAL, VBAT,SIN,RSRP,SINR,UPTIME,LOGTIME", "logtime"), - DATA_MONITOR_PIPE_OTHER("智能警示桩", "data_monitor_pipe_other", "devcode,uptime,logtime,well_number", "DEVCODE,TEMPERATURE,HUMIDITY,VBAT,PIPE_INCLINE_ALARM,PIPE_BREAK_ALARM,GAS_ALARM,LEFT_OFF_LINE_ALARM,LEFT_VIBRATE_ALARM,RIGHT_OFF_LINE_ALARM,RIGHT_VIBRATE_ALARM,PICTURE_ALARM,LEFT_GAS,RIGHT_GAS,LEFT_LENGTH,RIGHT_LENGTH,LOGTIME,UPTIME ", "logtime"), - DATA_PAN_GAS("场站监测云台", "data_pan_gas", "DEVICE_CODE,,logtime,LEDGER_CODE", "ID,LEDGER_NUMBER,DEVICE_CODE,CONCENTRATION,LOGTIME,DIRCETION,PITCH", "LOGTIME"); + DATA_GAS("燃气智能监测终端", "data_gas", "devcode,uptime,logtime,well_code", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime","cell,uptime"), + DATA_GAS_LIQUID("燃气智能监测终端(一体化)", "data_gasliquid_gas", "devcode,uptime,logtime,well_code", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime","cell,uptime"), + DATA_TUBE_OTHER("管网哨兵", "data_tube_other", "devcode,uptime,logtime,well_code", "DEVCODE,GASVAL, VBAT,SIN,RSRP,SINR,UPTIME,LOGTIME,sig,temp,SS_STATE as ssState", "logtime","VBAT,UPTIME"), + DATA_MONITOR_PIPE_OTHER("智能警示桩", "data_monitor_pipe_other", "devcode,uptime,logtime,well_number", "DEVCODE,TEMPERATURE,HUMIDITY,VBAT,PIPE_INCLINE_ALARM,PIPE_BREAK_ALARM,GAS_ALARM,LEFT_OFF_LINE_ALARM,LEFT_VIBRATE_ALARM,RIGHT_OFF_LINE_ALARM,RIGHT_VIBRATE_ALARM,PICTURE_ALARM,LEFT_GAS,RIGHT_GAS,LEFT_LENGTH,RIGHT_LENGTH,LOGTIME,UPTIME ", "logtime","VBAT as cell,uptime"), + DATA_PAN_GAS("场站监测云台", "data_pan_gas", "DEVICE_CODE,,logtime,LEDGER_CODE", "ID,LEDGER_NUMBER,DEVICE_CODE,CONCENTRATION,LOGTIME,DIRCETION,PITCH", "LOGTIME","CONCENTRATION as cell ,LOGTIME as uptime"), + DATA_GAS_OTHER("管网哨兵(一体化)", "data_gas_other", "devcode,uptime,logtime,well_code", "DEVCODE,GASVAL, VBAT,SIN,RSRP,SINR,UPTIME,LOGTIME,sig,temp,SS_STATE as ssState", "logtime","VBAT,UPTIME"); public static DeviceDataEnum typeOf(String type) { DeviceDataEnum deviceDataEnum = null; @@ -28,6 +29,9 @@ case "燃气智能监测终端(一体化)": deviceDataEnum = DATA_GAS_LIQUID; break; + case "管网哨兵(一体化)": + deviceDataEnum = DATA_GAS_OTHER; + break; default: deviceDataEnum = null; } @@ -39,13 +43,15 @@ String tableColumns; String orderColumn; String type; + String cellColumn; - DeviceDataEnum(String type, String tableName, String queryColumns, String tableColumns, String orderColumn) { + DeviceDataEnum(String type, String tableName, String queryColumns, String tableColumns, String orderColumn,String cellColumn) { this.type = type; this.queryColumns = queryColumns; this.tableName = tableName; this.tableColumns = tableColumns; this.orderColumn = orderColumn; + this.cellColumn = cellColumn; ; } @@ -98,4 +104,12 @@ public void setType(String type) { this.type = type; } + + public String getCellColumn() { + return cellColumn; + } + + public void setCellColumn(String cellColumn) { + this.cellColumn = cellColumn; + } } diff --git a/casic-public/src/main/java/com/casic/missiles/enums/DeviceTypeEnum.java b/casic-public/src/main/java/com/casic/missiles/enums/DeviceTypeEnum.java index b372b6b..11cd89a 100644 --- a/casic-public/src/main/java/com/casic/missiles/enums/DeviceTypeEnum.java +++ b/casic-public/src/main/java/com/casic/missiles/enums/DeviceTypeEnum.java @@ -20,7 +20,8 @@ KAD("点型可燃气体探测器", 16,"data_kad"), PANTILT("激光甲烷云台", 17,"data_pan_gas"), PRESSURE("压力监测终端", 18,"data_pressure"), - GasDector("点型可燃气体探测器", 19,"data_gas_dector"); + GasDector("点型可燃气体探测器", 19,"data_gas_dector"), + LGGasOther("管网哨兵(一体化)", 20,"data_gas_other"); // 成员变量 private String name; diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/sensorHub/resolver/ResponseResolver.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/sensorHub/resolver/ResponseResolver.java index 09029f4..fda60a0 100644 --- a/casic-rest-api/src/main/java/com/casic/missiles/modular/sensorHub/resolver/ResponseResolver.java +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/sensorHub/resolver/ResponseResolver.java @@ -3,10 +3,7 @@ import com.alibaba.fastjson.JSONObject; import com.casic.missiles.enums.DeviceTypeEnum; import com.casic.missiles.modular.data.service.IDataAbstractService; -import com.casic.missiles.modular.data.service.impl.DataGasServiceImpl; -import com.casic.missiles.modular.data.service.impl.DataGasliquidGasServiceImpl; -import com.casic.missiles.modular.data.service.impl.DataMonitorPipeOtherServiceImpl; -import com.casic.missiles.modular.data.service.impl.DataTubeOtherServiceImpl; +import com.casic.missiles.modular.data.service.impl.*; import com.casic.missiles.util.SpringContextUtil; import org.springframework.stereotype.Component; @@ -21,6 +18,7 @@ private static DataGasliquidGasServiceImpl dataGasliquidGasService = SpringContextUtil.getApplicationContext().getBean(DataGasliquidGasServiceImpl.class); private static DataTubeOtherServiceImpl dataTubeOtherService = SpringContextUtil.getApplicationContext().getBean(DataTubeOtherServiceImpl.class); private static DataMonitorPipeOtherServiceImpl dataMonitorPipeOtherService = SpringContextUtil.getApplicationContext().getBean(DataMonitorPipeOtherServiceImpl.class); + private static DataGasOtherServiceImpl dataGasOtherService = SpringContextUtil.getApplicationContext().getBean(DataGasOtherServiceImpl.class); private static Map abstractResponseHashMap = new HashMap(); static { @@ -32,6 +30,7 @@ abstractResponseHashMap.put(DeviceTypeEnum.TubeOther.name(), dataTubeOtherService); abstractResponseHashMap.put(DeviceTypeEnum.MonitorPipeOther.name(), dataMonitorPipeOtherService); abstractResponseHashMap.put(DeviceTypeEnum.LG.name(), dataGasliquidGasService); + abstractResponseHashMap.put(DeviceTypeEnum.LGGasOther.name(), dataGasOtherService); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java index 03cb6a3..2aead9a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -65,7 +65,7 @@ //策略配置 .strategyConfig(builder -> { - builder.addInclude("sync_log","sync_log_detail") // 设置需要生成的表名 + builder.addInclude("data_gas_other") // 设置需要生成的表名 .addTablePrefix() // 设置过滤表前缀 .entityBuilder() //实体类配置 .enableLombok() //使用lombok diff --git a/casic-web/src/main/resources/config/application-dev.yml b/casic-web/src/main/resources/config/application-dev.yml index f5f95d4..dc535ea 100644 --- a/casic-web/src/main/resources/config/application-dev.yml +++ b/casic-web/src/main/resources/config/application-dev.yml @@ -22,16 +22,17 @@ redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer casic: #kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/websocket/*,/v2/api-docs,/v2/api-docs-ext,/doc.html,/v2/api-docs/swagger-ui.html,/swagger-resources,/webjars/**,/device/receiveData,/alarmReturn,/getMap,/system/busGrid/synAllGrids,/system/busLedger/synAllLedger,/system/busLedger/synAllDept,/system/ctUser/synAllUsers,/sync/token + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/websocket/*,/v2/api-docs,/v2/api-docs-ext,/doc.html,/v2/api-docs/swagger-ui.html,/swagger-resources,/webjars/**,/device/receiveData,/alarmReturn,/getMap,/system/busGrid/synAllGrids,/system/busLedger/synAllLedger,/system/busLedger/synAllDept,/system/ctUser/synAllUsers,/sync/token,/ptz/acceptGasData,/ptz/acceptAlarmData #flowable数据源和多数据源配置 db: init: enable: false brAppUrl: http://10.30.7.26:20115/monitorDataReceive/alarmPush brPanGetDevcodeUrl: http://172.17.240.116:9092/ranshitong/device/getOneDevice - brPanControlUrl: http://172.17.240.116:9092/HkController/controCearm - brPanVideoUrl: http://172.17.240.116:9092/HkController/getPlayBackUrl - brPanRealVideoUrl: http://172.17.240.116:9092/HkController/getUrl + brPanControlUrl: http://172.17.240.116:9092/HK/controCearm + brPanVideoUrl: http://172.17.240.116:9092/HK/getPlayBackUrl + brPanRealVideoUrl: http://172.17.240.116:9092/HK/getUrl + brSendConfigUrl: http://172.17.112.21:4011 enabled: true smartcity: config: diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java new file mode 100644 index 0000000..fc881a1 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.data.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 外协管盯 前端控制器 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RestController +@RequestMapping("/system/dataGasOther") +public class DataGasOtherController { + +} + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java new file mode 100644 index 0000000..b5f3627 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.data.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 外协管盯 Mapper 接口 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Mapper +public interface DataGasOtherMapper extends BaseMapper { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml new file mode 100644 index 0000000..8ce1455 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID, DEVCODE, WELL_CODE, WELL_NUMBER, GASVAL, VBAT, BATSTA, SIN, RSRP, SINR, UPTIME, LOGTIME, SIG, TEMP, SS_STATE + + + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java new file mode 100644 index 0000000..53972ba --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java @@ -0,0 +1,94 @@ +package com.casic.missiles.modular.data.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 外协管盯 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Builder +@Data +@TableName("data_gas_other") +@ApiModel(value = "DataGasOther对象", description = "外协管盯") +public class DataGasOther implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId("ID") + private Long id; + + @ApiModelProperty("设备编号") + @TableField("DEVCODE") + private String devcode; + + @ApiModelProperty("点位编号") + @TableField("WELL_CODE") + private String wellCode; + + @ApiModelProperty("位号") + @TableField("WELL_NUMBER") + private String wellNumber; + + @ApiModelProperty("气体浓度采样值") + @TableField("GASVAL") + private String gasval; + + @ApiModelProperty("设备电池电压值(毫伏)") + @TableField("VBAT") + private String vbat; + + @ApiModelProperty("电池状态0 正常、 1 低电告警、2 关机") + @TableField("BATSTA") + private String batsta; + + @ApiModelProperty("接收信号强度等级") + @TableField("SIN") + private String sin; + + @ApiModelProperty("接收信号参考质量 服务小 区的 RSRP 值") + @TableField("RSRP") + private String rsrp; + + @ApiModelProperty("信噪比") + @TableField("SINR") + private String sinr; + + @ApiModelProperty("采集时间") + @TableField("UPTIME") + private Date uptime; + + @ApiModelProperty("上传时间") + @TableField("LOGTIME") + private Date logtime; + + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态,0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java index 86077b8..f4d4417 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java @@ -76,4 +76,17 @@ private Date logtime; + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态:0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java new file mode 100644 index 0000000..842ca0b --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.data.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.data.entity.DataGasOther; + +/** + *

+ * 外协管盯 服务类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +public interface IDataGasOtherService extends IService { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java new file mode 100644 index 0000000..4c660e9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java @@ -0,0 +1,226 @@ +package com.casic.missiles.modular.data.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.enums.DeviceTypeEnum; +import com.casic.missiles.enums.DictEnum; +import com.casic.missiles.modular.alarm.dto.AlarmDeviceRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.AlarmRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.BusAlarmLedgerDTO; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.data.dao.DataGasMapper; +import com.casic.missiles.modular.data.dao.DataGasOtherMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import com.casic.missiles.modular.data.entity.DataTubeOther; +import com.casic.missiles.modular.data.service.IDataAbstractService; +import com.casic.missiles.modular.data.service.IDataGasOtherService; +import com.casic.missiles.modular.data.service.ITrackLogService; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Optional; + +/** + *

+ * 外协管盯 服务实现类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RequiredArgsConstructor +@Service +public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { + + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + private final DataGasMapper dataGasMapper; + private final IAlarmRecordsService alarmRecordsService; + private final IAlarmRuleService alarmRuleService; + private final ITrackLogService iTrackLogService; + private final IBusDeviceService busDeviceService; + + @Override + public void process(String dataContent) { + + //解析数据+根据业务处理存储数据 + JSONObject json = JSONObject.parseObject(dataContent); + String devCode = json.get("devCode").toString(); + JSONObject jsonObject = json.getJSONObject("mBody"); + if (mType[0].equals(json.get("mType")) || mType[3].equals(json.get("mType"))) {//存储上报数据 + this.processNormalData(jsonObject, devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + this.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.TubeOther.name().equals(json.get("devType"))) { + if ("TubeOtherConfigSuccess".equals(jsonObject.get("bType"))) { +// deviceConfigManager.updateStatus(devCode); + } + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } else if (mType[4].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); +// imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; + try { + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); + } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + } + } + + @Transactional + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.getString("cell"); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = jsonObject.getJSONArray("datas"); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + String bfcf = busDeviceService.getBfcf(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).getString("gasval"); + String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); + String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); + String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataGasOther.builder() + .wellCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .wellNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .devcode(devCode) +// .cell(cell) + .gasval(gas) + .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime))) + .logtime(new Date()) + .vbat(vbat) + .batsta(batsta) + .rsrp(rsrp) + .sin(pci) + .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) + .build());//存储采集数据 + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) continue; + + //3.清除设备告警 + alarmRecordsService.cancelDeviceAlarm(devCode); + //4.存报警 + //若没绑定井,则不产生报警 + boolean alarmFlag = false; + if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { + //获取报警规则 + List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); + for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { + if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && + Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { + alarmFlag = true; + //写入报警 + //1、判断报警是否已存在 + if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.TubeOther.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); + //7.更新管线状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java index d248540..b33a1ee 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java @@ -91,7 +91,6 @@ } - public List getBusAlarmLedgerList(String devCode) { return this.dataGasMapper.getListByDevCode(devCode); } @@ -113,6 +112,13 @@ for (int i = 0; i < jsonArray.size(); i++) { try { String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) .findFirst(); @@ -175,18 +181,18 @@ alarmRecordsService.cancelDeviceAlarm(devCode); //4.存报警 //若没绑定井,则不产生报警 - boolean alarmFlag = false; + boolean alarmFlag = false; if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { //获取报警规则 List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { - alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); } break; } @@ -197,7 +203,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及设备状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新监测井状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java index e848fce..6297093 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java @@ -84,42 +84,78 @@ } - @Transactional - public void processAlarmData(JSONObject jsonObject, String devCode) { - JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + public void processEventAlarm(String devCode, String eventTypeCode, String logTime, String eventValue) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - //获取报警事件 - List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - - List busWellDTOList = dataGasMapper.getListByDevCode(devCode); - //若没绑定井,则不产生报警 - if (busWellDTOList != null && busWellDTOList.size() > 0) { - - for (int i = 0; i < jsonArray.size(); i++) { + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + //特殊处理消警 + if ("0".equals(eventValue)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, eventTypeCode); + } + return; } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> eventTypeCode.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 - if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + if (!alarmDeviceRuleResponseDTO.isPresent()) return; //1.查询是否已存在该类报警 - if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) return; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); - - + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + } + } + } + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + try { + String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmEventCode)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } } } } @@ -169,7 +205,76 @@ .rightVibrateAlarm(VibR) .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(uptime))) .logtime(new Date()) - .build());//存储采集数据 + .build()); + + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + ruleResponseDTOList.forEach(ruleResponseDTO -> { + + if ("Sloping".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Sloping)&&(!alarmRecordsService.isWatchAlarms(devCode,"Sloping"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Sloping", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Sloping)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Sloping"); + + } + } + if ("Destroy".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Destroy)&&(!alarmRecordsService.isWatchAlarms(devCode,"Destroy"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Destroy", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Destroy)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Destroy"); + + } + } + if ("Leak".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Leak)&&(!alarmRecordsService.isWatchAlarms(devCode,"Leak"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Leak", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Leak)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Leak"); + + } + } + if ("DiscL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscL)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscL"); + + } + } + if ("DiscR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscR)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscR"); + } + } + + if ("VibL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibL)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibL"); + } + } + if ("VibR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibR)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibR"); + } + } + }); + +// //处理报警事件 +// processEventAlarm(devCode,"Sloping",uptime,Sloping); +// processEventAlarm(devCode,"Destroy",uptime,Destroy); +// processEventAlarm(devCode,"Leak",uptime,Leak); +// processEventAlarm(devCode,"DiscL",uptime,DiscL); +// processEventAlarm(devCode,"DiscR",uptime,DiscR); +// processEventAlarm(devCode,"VibL",uptime,VibL); +// processEventAlarm(devCode,"VibR",uptime,VibR); + //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -197,7 +302,7 @@ if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && gas >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), gas)) { @@ -213,7 +318,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R,alarmFlag?"燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R, alarmFlag ? "燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java index f913775..895d201 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java @@ -89,6 +89,7 @@ String bfcf = busDeviceService.getBfcf(devCode); if (DictEnum.BF_ON.equals(bfcf)) { JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); //获取报警事件 List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); List busWellDTOList = dataGasMapper.getListByDevCode(devCode); @@ -96,25 +97,43 @@ if (busWellDTOList != null && busWellDTOList.size() > 0) { for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 if (!alarmDeviceRuleResponseDTO.isPresent()) continue; //1.查询是否已存在该类报警 if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { @@ -141,6 +160,9 @@ String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); gas = String.format("%.2f", Double.valueOf(gas)); //1.存数据 save(DataTubeOther.builder() @@ -156,6 +178,9 @@ .rsrp(rsrp) .sin(pci) .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) .build());//存储采集数据 //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -186,7 +211,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 98e736b..2288075 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -216,5 +216,15 @@ public ReturnDTO syncDeviceStatus() { return ReturnUtil.success(iBusDeviceService.syncDeviceStatus()); } + + @ApiOperation("根据闸井id获取设备信息") + @PostMapping("/getListByWellId") + @ResponseBody + public ReturnDTO getListByWellId(@RequestBody IdDTO idDTO) { + Assert.isFalse(ObjectUtil.isEmpty(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iBusDeviceService.getListByWellId(idDTO.getId())); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java index 72a2d84..d6d9743 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java @@ -85,6 +85,7 @@ return ReturnUtil.success(iBusLedgerService.detail(idDTO.getId())); } + /** * 同步三级部门 * diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java index 9e412d2..4316b56 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java @@ -1,22 +1,33 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.response.ErrorResponseData; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; +import com.casic.missiles.modular.device.dto.BusPositionImportDTO; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.ReturnUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataAccessException; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; /** @@ -40,8 +51,44 @@ @PostMapping("/addPosition") @ResponseBody public ReturnDTO addPosition(@RequestBody BusLedgerPipe busLedgerPipe) { + + List busLedgerPipeList = iBusLedgerPipeService.getListByNumber(busLedgerPipe.getTagNumber()); + if(busLedgerPipeList!=null&&busLedgerPipeList.size()>0){ + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE,"安装位号已存!!!"); + } + Long id =IdUtil.getSnowflake(1,2).nextId(); + busLedgerPipe.setId(id); iBusLedgerPipeService.save(busLedgerPipe); - return ReturnUtil.success(busLedgerPipe.getId()); + return ReturnUtil.success(id); + } + + @ApiOperation("批量导入") + @RequestMapping(value = "/batchImport", method = RequestMethod.POST) + @ResponseBody + public Object batchImport(@RequestParam("file") MultipartFile file) { + List results = new ArrayList<>(); + try { + results = this.importExcel(BusPositionImportDTO.class, file, null, null); + List list = iBusLedgerPipeService.addPositionBatch(results); + if (!CollectionUtil.isEmpty(list)) { + //获取校验报错信息 + return new ErrorResponseData(list.get(0)); + } + } catch (Exception e) { + return catchMybatisPlusException(e, "导入位置信息失败"); + } + return ResponseData.success(); + } + + private ResponseData catchMybatisPlusException(Exception e, String errorMsg) { + if (e instanceof DataAccessException) { + DataAccessException mybatisPlusException = (DataAccessException) e; + String message = mybatisPlusException.getRootCause().getMessage(); + if (message.contains("Duplicate entry '")) { + return new ErrorResponseData("安装位号重复:" + message.replaceAll("Duplicate entry '", "").replaceAll("' for key 'DEVCODE'", "")); + } + } + return new ErrorResponseData(errorMsg); } @ApiOperation("编辑点位") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java index d1e08a8..d938876 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java @@ -51,6 +51,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getOperatorName()), "CREATE_USER", request.getOperatorName()); queryWrapper.ge(ObjectUtil.isNotEmpty(request.getStartTime()), "START_TIME", request.getStartTime()); queryWrapper.le(ObjectUtil.isNotEmpty(request.getEndTime()), "END_TIME", request.getEndTime()); + queryWrapper.orderByDesc("START_TIME"); return ReturnUtil.success(super.packForBT(iSyncLogService.page(page, queryWrapper))); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java index 5ee5291..23ddee9 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java @@ -73,4 +73,12 @@ " where bd.DEVCODE= #{devcode} and bd.VALID=1 " + ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD asc") List getDeviceTypeRule(@Param("devcode") String devcode); + + + @Select("SELECT bd.* from bus_device bd " + + "left JOIN bus_device_ledger bl on bd.id= bl.DEVICE_ID and bl.VALID=1 " + + "LEFT JOIN bus_ledger_all_view bv on bv.id= bl.LEDGER_ID and bv.type= bl.TYPE and bv.VALID=1 " + + "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") + List getListByWellId(@Param("wellId") Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java index e1d16c4..a4c3f7a 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java @@ -37,7 +37,7 @@ @Select("SELECT b.ORG_ID,b.ORG_CODE,b.ORG_NAME,b.PARENT_ID FROM `bus_sync_org_relation` b WHERE b.DEL_FLAG =0 and b.PARENT_ID = #{syncId} ") List synDept(@Param("syncId") String syncId); - @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view ") + @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view where VALID=1") List getBusLedgers(); @Select("SELECT DEVCODE FROM `bus_device` where VALID>0 ") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml index 99ef10b..c6d1fff 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml @@ -29,6 +29,7 @@ bp.DEVICE_MODEL as deviceModel, bt.TYPE_NAME as typeName, + bp.DATA_SERVICE as deviceCategory, bm.`NAME` as manufactureName, bl.tagNumber as tagNumber, bl.id as ledgerId, @@ -81,6 +82,10 @@ and bd.LOGTIME #{request.logTime2} + + and bp.DATA_SERVICE =#{request.deviceCategory} + + ORDER BY bd.INSTALL_DATE DESC diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml index bdadb6a..d3f4684 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml @@ -40,7 +40,7 @@ `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + AND bdl.VALID = 1 JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -99,8 +99,8 @@ bm.`NAME` as manufactureName FROM `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE - LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID and bdl.type=blp.type + AND bdl.VALID = 1 LEFT JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -117,7 +117,9 @@ WITH station_temp as(SELECT bl.ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID FROM `bus_ledger` bl where bl.VALID=1 and bl.TYPE =2) - select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME from station_temp bl + select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME,bd.DEVCODE from station_temp bl left join bus_device_ledger bdl on bdl.LEDGER_ID = bl.ID and bdl.TYPE =2 and bdl.valid=1 left join bus_device bd on bd.id= bdl.DEVICE_ID and bd.VALID=1 order by bl.ID diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml index 7b92b04..1d97c64 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml @@ -184,7 +184,7 @@ WHERE EQ_LOCNO like 'N%' and - EQ_CATEGORY in (1,3) + EQ_CATEGORY in (1,2,3,5) diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java index 859cf08..143b42d 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java @@ -23,6 +23,9 @@ @ApiModelProperty("设备类型id") private Long typeId; + @ApiModelProperty("产品名称") + private String productName; + @ApiModelProperty("指令集合") private List commandConfigList; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java index 646610b..2cb5894 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("最新上传结束时间") private String logTime2; + + @ApiModelProperty("设备类别(0:自有设备,1:数据服务)") + private String deviceCategory; } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java index 8c95537..28b30fa 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java @@ -44,6 +44,9 @@ @ExcelProperty("关联管线") private String pipeCode; + @ExcelProperty("监测类型") + private String monitorType; + private String watchObject; private Long deviceType; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java index 0980c34..ac5daf0 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java @@ -24,4 +24,7 @@ @ApiModelProperty("详细位置") private String position; + @ApiModelProperty("1:其他,3:管线") + private String type; + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java new file mode 100644 index 0000000..bce7ebd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.device.dto; + + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class BusPositionImportDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + + @ExcelProperty("管线编号") + private String pipeCode; + + @ExcelProperty("安装位号") + private String tagNumber; + + @ExcelProperty("经度(高德)") + private String lngGaode; + + @ExcelProperty("纬度(高德)") + private String latGaode; + + @ExcelProperty("详细位置") + private String position; + + @ExcelProperty("管理单位") + private Long deptid; + + @ExcelProperty("位置类别") + private String type; + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java index 58faa0e..d72ae78 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java @@ -16,13 +16,13 @@ private String deviceId; //移动命令:left right up down left_up left_down right_up right_down GOTO_PRESET - @ApiModelProperty("移动命令") + @ApiModelProperty("移动命令(left right up down left_up left_down right_up right_down)") private String command; - @ApiModelProperty("速度") + @ApiModelProperty("速度,一般传100") private String speed; - @ApiModelProperty("启停命令") + @ApiModelProperty("启停命令(0:开始,1:结束)") private String cameraAction; @ApiModelProperty("预置点编号") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java index b4ec73c..5a3d0b0 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java @@ -66,7 +66,7 @@ private String powerSupplyMode; - @ApiModelProperty("是否结束数据服务") + @ApiModelProperty("是否结束数据服务(1:是,0:否)") @TableField("DATA_SERVICE") private String dataService; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java index 1184995..407e3c1 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java @@ -193,10 +193,14 @@ @TableField(exist = false) private String bfztName; + @ApiModelProperty("设备类别(0:自有设备,1:数据服务)") + @TableField(exist = false) + private String deviceCategory; + public BusDevice() { } - public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds) { + public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds, String monitorType) { this.devcode = devcode; this.deviceType = deviceType; this.productId = productId; @@ -204,6 +208,7 @@ this.installDate = installDate; this.watchObject = watchObject; this.ledgerIds = ledgerIds; + this.monitorType = monitorType; } public static List convertDeviceList(List dtoList) { @@ -227,7 +232,8 @@ deviceImportDTO.getValid(), deviceImportDTO.getInstallDate(), deviceImportDTO.getWatchObject(), - deviceImportDTO.getLedgerIds())); + deviceImportDTO.getLedgerIds(), + deviceImportDTO.getMonitorType())); }); return busDeviceList; } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java index 12b52de..1ac8455 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java @@ -1,16 +1,20 @@ package com.casic.missiles.modular.device.entity; +import cn.hutool.core.util.IdUtil; 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 com.casic.missiles.modular.device.dto.BusPositionImportDTO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import java.io.Serializable; +import java.util.ArrayList; import java.util.Date; +import java.util.List; /** *

@@ -29,7 +33,7 @@ private static final long serialVersionUID = 1L; @ApiModelProperty("主键") - @TableId(value = "ID", type = IdType.AUTO) +// @TableId(value = "ID", type = IdType.AUTO) private Long id; @ApiModelProperty("编号") @@ -60,6 +64,10 @@ @TableField("DEPTID") private Long deptid; + @ApiModelProperty("类别(1:其他,3:管线)") + @TableField("`TYPE`") + private String type; + @ApiModelProperty("责任部门") @TableField("RESPONSIBLE_DEPT") private Long responsibleDept; @@ -110,9 +118,10 @@ public BusLedgerPipe() { } - public BusLedgerPipe(String pipeCode, String ledgerName, String tagNumber, + public BusLedgerPipe(Long id,String pipeCode, String ledgerName, String tagNumber, String lngGaode, String latGaode, String position, - Long deptid, String devcode) { + Long deptid, String devcode, String type) { + this.id=id; this.pipeCode = pipeCode; this.ledgerName = ledgerName; this.tagNumber = tagNumber; @@ -121,5 +130,26 @@ this.position = position; this.deptid = deptid; this.devcode = devcode; + this.type = type; } + + public static List convertDeviceList(List dtoList) { + + + List busDeviceList = new ArrayList<>(); + dtoList.forEach(positionImportDTO -> { + + busDeviceList.add(new BusLedgerPipe(IdUtil.getSnowflake(1,2).nextId(),positionImportDTO.getPipeCode(), + positionImportDTO.getTagNumber(), + positionImportDTO.getTagNumber(), + positionImportDTO.getLngGaode(), + positionImportDTO.getLatGaode(), + positionImportDTO.getPosition(), + positionImportDTO.getDeptid(), + "", + positionImportDTO.getType())); + }); + return busDeviceList; + } + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java index aaaa409..63c0576 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java @@ -52,4 +52,8 @@ List getDeviceRule(String devcode); + List getDevicesByCodes(List devcodes); + + List getListByWellId(Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java index 14f6a93..8692383 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java @@ -2,11 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; -import com.casic.missiles.core.datascope.DataScope; -import com.casic.missiles.modular.device.dto.BusLedgerPipeMonitorRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeResponseDTO; -import com.casic.missiles.modular.device.dto.MonitorDataRequestDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import java.util.List; @@ -26,17 +22,21 @@ Page monitorPipePageList(Page page, BusLedgerPipeMonitorRequestDTO request); - BusLedgerPipeResponseDTO detail(Long id,String devcode); + BusLedgerPipeResponseDTO detail(Long id, String devcode); - List> watchDataByPipe(MonitorDataRequestDTO requestDTO); + List> watchDataByPipe(MonitorDataRequestDTO requestDTO); - List> pipeList(); + List> pipeList(); - List> deviceList(); + List> deviceList(); BusLedgerPipe saveBusLedgerPipe(BusLedgerPipe busLedgerPipe); Boolean updateMonitorStatus(List tagNumbers); + List addPositionBatch(List results); + + List getListByNumber(String tagNumber); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java index 66ed812..ad72230 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java @@ -12,9 +12,12 @@ import com.casic.missiles.modular.device.dto.BusConfigOtherDTO; import com.casic.missiles.modular.device.dto.BusConfigRequestDTO; import com.casic.missiles.modular.device.entity.BusConfig; +import com.casic.missiles.modular.device.entity.BusDevice; import com.casic.missiles.modular.device.service.IBusConfigService; +import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.HttpClientUtils; import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -22,6 +25,9 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.LinkedBlockingDeque; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; /** *

@@ -36,6 +42,11 @@ public class BusConfigServiceImpl extends ServiceImpl implements IBusConfigService { private final AbstractPermissionContext abstractPermissionContext; + private final IBusDeviceService iBusDeviceService; + private final ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(3, 6, 60, TimeUnit.SECONDS, new LinkedBlockingDeque<>(10)); + + @Value("${casic.brSendConfigUrl}") + private String brSendConfigUrl; @Transactional @Override @@ -105,6 +116,42 @@ .operator(user != null ? user.getId() : null) .operatorName(user != null ? user.getName() : "").build()); }); + + + threadPoolExecutor.execute( + () -> { + //发送第三方下发: + if (busConfigOtherDTO.getProductName().contains("管网哨兵")) { + List busDeviceList = iBusDeviceService.getDevicesByCodes(devcodes); + for (BusDevice busDevice : busDeviceList) { + if (ObjectUtil.isAllNotEmpty(busDevice.getNbProductId(), busDevice.getNbDeviceId())) { + Map commandMap = new HashMap<>(); + commandMap.put("productId", busDevice.getNbProductId()); + commandMap.put("devCode", busDevice.getDevcode()); + commandMap.put("deviceId", busDevice.getNbDeviceId()); + commandMap.put("cmdList", busConfigOtherDTO.getCommandConfigList()); + HttpClientUtils.post(brSendConfigUrl+"/tube/config/send", JSON.toJSONString(commandMap)); + } + } + } else if (busConfigOtherDTO.getProductName().contains("智能警示桩")) { + + List busDeviceList = iBusDeviceService.getDevicesByCodes(devcodes); + for (BusDevice busDevice : busDeviceList) { + if (ObjectUtil.isAllNotEmpty(busDevice.getNbProductId(), busDevice.getNbDeviceId())) { + Map commandMap = new HashMap<>(); + commandMap.put("productId", busDevice.getNbProductId()); + commandMap.put("devCode", busDevice.getDevcode()); + commandMap.put("deviceId", busDevice.getNbDeviceId()); + commandMap.put("cmdList", busConfigOtherDTO.getCommandConfigList()); + HttpClientUtils.post(brSendConfigUrl+"/sentinel/config/send", JSON.toJSONString(commandMap)); + } + } + + } + } + ); + + return this.saveBatch(busConfigs); // List> mapList = new ArrayList<>(); // Map commandMap = new HashMap<>(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java index 60d15e5..bae6902 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java @@ -3,6 +3,7 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -80,6 +81,7 @@ @Override public Page listPage(Page page, BusDeviceDTO request) { + page.setOptimizeCountSql(false); Page busDevicePage = this.baseMapper.pageList(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List busDeviceList = busDevicePage.getRecords(); busDeviceList.forEach(busDevice -> { @@ -227,7 +229,7 @@ if (deviceDataEnum.getTableColumns().contains("cell")) { String[] queryColumns = deviceDataEnum.getQueryColumns().split(",", 4); resultMap = this.baseMapper.cellAnalysis(deviceDataEnum.getTableName(), - "cell,uptime", + deviceDataEnum.getCellColumn(), queryColumns[0], queryColumns[1], deviceDataEnum.getOrderColumn(), @@ -265,14 +267,13 @@ } else { List busDeviceLedgers = busDeviceLedgerService.getListByDeviceId(busDevice.getId()); //没绑定关系,先绑定 - if (ObjectUtil.isNotEmpty(busDeviceLedgers)) { + if (busDeviceLedgers == null || busDeviceLedgers.size() < 1) { busDeviceLedgerService.saveDeviceLedger(busDevice.getId(), busDevice.getLedgerIds(), busDevice.getWatchObject()); } else { //已绑定,判断是否位置变了 List ledgerIdsPre = busDeviceLedgers.stream().map(BusDeviceLedger::getLedgerId).collect(Collectors.toList()); if (ledgerIds.containsAll(ledgerIdsPre) && ledgerIdsPre.containsAll(ledgerIds)) { } else { - busDeviceLedgerService.deleteDeviceLedgers(Arrays.asList(busDevice.getId())); busDeviceLedgerService.saveDeviceLedger(busDevice.getId(), busDevice.getLedgerIds(), busDevice.getWatchObject()); } } @@ -304,6 +305,8 @@ List codeList = iBusLedgerService.getCodeLists(); //获取管线编号 List pipeCodeList = iBusLedgerService.getPipeCodeList(); + List pipeList = new ArrayList<>(); + final Integer[] index = {1}; results.forEach(deviceImportDTO -> { index[0]++; @@ -357,22 +360,16 @@ return; } //新增点位 - if ("3".equals(deviceImportDTO.getWatchObject())) { + if ("3".equals(deviceImportDTO.getWatchObject()) || "1".equals(deviceImportDTO.getWatchObject())) { //toDo:安装位号一致,入一次即可 //为管线 - BusLedgerPipe busLedgerPipe = new BusLedgerPipe(deviceImportDTO.getPipeCode(), deviceImportDTO.getTagNumber(), + Long pipeLedgerId = IdUtil.getSnowflake(1, 2).nextId(); + BusLedgerPipe busLedgerPipe = new BusLedgerPipe(pipeLedgerId, deviceImportDTO.getPipeCode(), deviceImportDTO.getTagNumber(), deviceImportDTO.getTagNumber(), deviceImportDTO.getLng(), deviceImportDTO.getLat(), - deviceImportDTO.getPosition(), deviceImportDTO.getDeptid(), deviceImportDTO.getDevCode()); - busLedgerPipe = iBusLedgerPipeService.saveBusLedgerPipe(busLedgerPipe); - deviceImportDTO.setLedgerIds(Arrays.asList(busLedgerPipe.getId())); - }else if("1".equals(deviceImportDTO.getWatchObject())){ - //新增闸井 - BusLedger busLedger = new BusLedger(deviceImportDTO.getTagNumber(), - deviceImportDTO.getTagNumber(),deviceImportDTO.getTagNumber(), - deviceImportDTO.getLng(),deviceImportDTO.getLat(),deviceImportDTO.getPosition(), - deviceImportDTO.getDeptid()); - this.iBusLedgerService.save(busLedger); - deviceImportDTO.setLedgerIds(Arrays.asList(busLedger.getId())); + deviceImportDTO.getPosition(), deviceImportDTO.getDeptid(), deviceImportDTO.getDevCode(), deviceImportDTO.getWatchObject()); +// busLedgerPipe = iBusLedgerPipeService.saveBusLedgerPipe(busLedgerPipe); + pipeList.add(busLedgerPipe); + deviceImportDTO.setLedgerIds(Arrays.asList(pipeLedgerId)); } } @@ -383,6 +380,10 @@ return list; } + if (pipeList != null && pipeList.size() > 0) { + iBusLedgerPipeService.saveBatch(pipeList); + } + List busDeviceList = BusDevice.convertDeviceList(results); //保存设备信息 @@ -514,7 +515,7 @@ } -// @Cacheable(value = "alarmRuleCache", key = "#devcode") + // @Cacheable(value = "alarmRuleCache", key = "#devcode") @Override public List getDeviceRule(String devcode) { List alarmRuleValueList = this.baseMapper.getSpecialDeviceRule(devcode); @@ -523,4 +524,18 @@ } return alarmRuleValueList; } + + + @Override + public List getDevicesByCodes(List devcodes) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("DEVCODE", devcodes); + queryWrapper.eq("VALID", "1"); + return this.baseMapper.selectList(queryWrapper); + } + + @Override + public List getListByWellId(Long wellId) { + return this.baseMapper.getListByWellId(wellId); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java index 5073159..7f8bfdc 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service.impl; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -12,11 +13,8 @@ import com.casic.missiles.enums.DeviceDataEnum; import com.casic.missiles.modular.device.dao.BusDeviceMapper; import com.casic.missiles.modular.device.dao.BusLedgerPipeMapper; -import com.casic.missiles.modular.device.dto.BusLedgerPipeMonitorRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeResponseDTO; -import com.casic.missiles.modular.device.dto.MonitorDataRequestDTO; -import com.casic.missiles.modular.device.entity.BusLedgerPipe; +import com.casic.missiles.modular.device.dto.*; +import com.casic.missiles.modular.device.entity.*; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.server.CommonServer; @@ -24,11 +22,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.stream.Collectors; /** *

@@ -63,6 +60,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getPipeCode()), "PIPE_CODE", request.getPipeCode()); queryWrapper.like(ObjectUtil.isNotEmpty(request.getPosition()), "POSITION", request.getPosition()); queryWrapper.in(ObjectUtil.isNotEmpty(deptIds), "DEPTID", deptIds); + queryWrapper.eq(ObjectUtil.isNotEmpty(request.getType()), "TYPE", request.getType()); Page pipePage = this.page(page, queryWrapper); List pipeList = pipePage.getRecords(); pipeList.forEach(pipe -> { @@ -156,6 +154,12 @@ return busLedgerPipe; } + public List getList() { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("VALID", "1"); + return this.baseMapper.selectList(queryWrapper); + } + @Override public Boolean updateMonitorStatus(List tagNumbers) { UpdateWrapper updateWrapper = new UpdateWrapper<>(); @@ -163,4 +167,43 @@ updateWrapper.set("MONITOR_STATE", "3"); return this.update(updateWrapper); } + + @Transactional + @Override + public List addPositionBatch(List results) { + List list = new ArrayList<>(); + if (!CollectionUtil.isEmpty(results)) { + List busLedgerPipeList = this.getList(); + List tagCodes = busLedgerPipeList.stream().map(BusLedgerPipe::getTagNumber).collect(Collectors.toList()); + final Integer[] index = {1}; + results.forEach(busPositionImportDTO -> { + index[0]++; + //设备编号查重 + if (tagCodes.contains(busPositionImportDTO.getTagNumber())) { + list.add("第" + index[0] + "行,安装位号已存在!"); + return; + } + + }); + if (CollectionUtil.isNotEmpty(list)) { + return list; + } + List busDeviceList = BusLedgerPipe.convertDeviceList(results); + + //保存点位信息 + this.saveBatch(busDeviceList); + + } else { + list.add("导入数据不能为空"); + } + return list; + } + + @Override + public List getListByNumber(String tagNumber) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("VALID", "1"); + queryWrapper.eq("TAG_NUMBER", tagNumber); + return this.baseMapper.selectList(queryWrapper); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java index 5798675..ec2b3f5 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.modular.device.dao.SyncLogMapper; import com.casic.missiles.modular.device.entity.SyncLog; import com.casic.missiles.modular.device.service.ISyncLogDetailService; @@ -39,7 +40,8 @@ syncLog.setUpdateCount(updateCount); syncLog.setAddCount(addCount); syncLog.setDeleteCount(deleteCount); - syncLog.setCreateUser(permissionContext.getAuthService().getLoginUser().getName()); + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + syncLog.setCreateUser(null == authUser ? "admin" : authUser.getName()); return this.baseMapper.insert(syncLog) > 0 ? true : false; } diff --git a/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java index b80c202..6be2b47 100644 --- a/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java +++ b/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -1,56 +1,56 @@ -package com.casic.missiles.job.config; - -import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - - -@Slf4j -@Configuration -@Data -@ConditionalOnExpression("T(org.apache.commons.lang3.StringUtils).isNotEmpty('${xxl.job.admin.addresses}')") -public class XxlJobConfig { - @Value("${xxl.job.admin.addresses}") - private String adminAddresses; - - @Value("${xxl.job.accessToken}") - private String accessToken; - - @Value("${xxl.job.executor.appname}") - private String appname; - -// @Value("${xxl.job.executor.address}") -// private String address; - - @Value("${xxl.job.executor.ip}") - private String ip; - - @Value("${xxl.job.executor.port}") - private int port; - - @Value("${xxl.job.executor.logpath}") - private String logPath; - - @Value("${xxl.job.executor.logretentiondays}") - private int logRetentionDays; - - @Bean - public XxlJobSpringExecutor xxlJobExecutor() { - log.info(">>>>>>>>>>> xxl-job config init."); - XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); - xxlJobSpringExecutor.setAdminAddresses(adminAddresses); - xxlJobSpringExecutor.setAppname(appname); -// xxlJobSpringExecutor.setAddress(address); - xxlJobSpringExecutor.setIp(ip); - xxlJobSpringExecutor.setPort(port); - xxlJobSpringExecutor.setAccessToken(accessToken); - xxlJobSpringExecutor.setLogPath(logPath); - xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); - - return xxlJobSpringExecutor; - } -} +//package com.casic.missiles.job.config; +// +//import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +//import lombok.Data; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.beans.factory.annotation.Value; +//import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; +//import org.springframework.context.annotation.Bean; +//import org.springframework.context.annotation.Configuration; +// +// +//@Slf4j +//@Configuration +//@Data +//@ConditionalOnExpression("T(org.apache.commons.lang3.StringUtils).isNotEmpty('${xxl.job.admin.addresses}')") +//public class XxlJobConfig { +// @Value("${xxl.job.admin.addresses}") +// private String adminAddresses; +// +// @Value("${xxl.job.accessToken}") +// private String accessToken; +// +// @Value("${xxl.job.executor.appname}") +// private String appname; +// +//// @Value("${xxl.job.executor.address}") +//// private String address; +// +// @Value("${xxl.job.executor.ip}") +// private String ip; +// +// @Value("${xxl.job.executor.port}") +// private int port; +// +// @Value("${xxl.job.executor.logpath}") +// private String logPath; +// +// @Value("${xxl.job.executor.logretentiondays}") +// private int logRetentionDays; +// +// @Bean +// public XxlJobSpringExecutor xxlJobExecutor() { +// log.info(">>>>>>>>>>> xxl-job config init."); +// XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); +// xxlJobSpringExecutor.setAdminAddresses(adminAddresses); +// xxlJobSpringExecutor.setAppname(appname); +//// xxlJobSpringExecutor.setAddress(address); +// xxlJobSpringExecutor.setIp(ip); +// xxlJobSpringExecutor.setPort(port); +// xxlJobSpringExecutor.setAccessToken(accessToken); +// xxlJobSpringExecutor.setLogPath(logPath); +// xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); +// +// return xxlJobSpringExecutor; +// } +//} diff --git a/casic-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java index 798424c..3785003 100644 --- a/casic-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java +++ b/casic-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -1,37 +1,37 @@ -package com.casic.missiles.job.handler; - - -import com.xxl.job.core.biz.model.ReturnT; -import com.xxl.job.core.context.XxlJobHelper; -import com.xxl.job.core.handler.annotation.XxlJob; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; - -/** - * XxlJob开发示例(Bean模式) - * - * 开发步骤: - * 1、任务开发:在Spring Bean实例中,开发Job方法; - * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 - * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; - * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; - */ -@Slf4j -@Component -public class DemoJobHandler { - - @XxlJob(value = "demoHandler") - public ReturnT execute(String param) throws Exception { - System.out.println("调度任务Demo执行"); - XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); - -// for (int i = 0; i < 5; i++) { -// XxlJobLogger.log("beat at:" + i); -// TimeUnit.SECONDS.sleep(2); -// } - return SUCCESS; - } - -} +//package com.casic.missiles.job.handler; +// +// +//import com.xxl.job.core.biz.model.ReturnT; +//import com.xxl.job.core.context.XxlJobHelper; +//import com.xxl.job.core.handler.annotation.XxlJob; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.stereotype.Component; +// +//import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; +// +///** +// * XxlJob开发示例(Bean模式) +// * +// * 开发步骤: +// * 1、任务开发:在Spring Bean实例中,开发Job方法; +// * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 +// * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; +// * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; +// */ +//@Slf4j +//@Component +//public class DemoJobHandler { +// +// @XxlJob(value = "demoHandler") +// public ReturnT execute(String param) throws Exception { +// System.out.println("调度任务Demo执行"); +// XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); +// +//// for (int i = 0; i < 5; i++) { +//// XxlJobLogger.log("beat at:" + i); +//// TimeUnit.SECONDS.sleep(2); +//// } +// return SUCCESS; +// } +// +//} diff --git a/casic-job/src/main/java/com/casic/missiles/job/handler/OfflineJobHandler.java b/casic-job/src/main/java/com/casic/missiles/job/handler/OfflineJobHandler.java index 1e6708f..276c5db 100644 --- a/casic-job/src/main/java/com/casic/missiles/job/handler/OfflineJobHandler.java +++ b/casic-job/src/main/java/com/casic/missiles/job/handler/OfflineJobHandler.java @@ -1,26 +1,26 @@ -package com.casic.missiles.job.handler; - -import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; -import com.xxl.job.core.context.XxlJobHelper; -import com.xxl.job.core.handler.annotation.XxlJob; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -@RequiredArgsConstructor -public class OfflineJobHandler { - - private final IAlarmRecordsService iAlarmRecordsService; - - /** - * 离线判断处理 - */ - @XxlJob("offlineJobHandler") - public void offlineJobHandler() { - XxlJobHelper.log("check offline"); - iAlarmRecordsService.processOffline(); - } - -} +//package com.casic.missiles.job.handler; +// +//import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +//import com.xxl.job.core.context.XxlJobHelper; +//import com.xxl.job.core.handler.annotation.XxlJob; +//import lombok.RequiredArgsConstructor; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.stereotype.Component; +// +//@Slf4j +//@Component +//@RequiredArgsConstructor +//public class OfflineJobHandler { +// +// private final IAlarmRecordsService iAlarmRecordsService; +// +// /** +// * 离线判断处理 +// */ +// @XxlJob("offlineJobHandler") +// public void offlineJobHandler() { +// XxlJobHelper.log("check offline"); +// iAlarmRecordsService.processOffline(); +// } +// +//} diff --git a/casic-job/src/main/java/com/casic/missiles/job/handler/SuspendExpireJobHandler.java b/casic-job/src/main/java/com/casic/missiles/job/handler/SuspendExpireJobHandler.java index 5ce8fc2..3610add 100644 --- a/casic-job/src/main/java/com/casic/missiles/job/handler/SuspendExpireJobHandler.java +++ b/casic-job/src/main/java/com/casic/missiles/job/handler/SuspendExpireJobHandler.java @@ -1,65 +1,65 @@ -package com.casic.missiles.job.handler; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.casic.missiles.modular.alarm.entity.AlarmRecords; -import com.casic.missiles.modular.alarm.entity.SuspendLog; -import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; -import com.casic.missiles.modular.alarm.service.IApprovalLogService; -import com.casic.missiles.modular.alarm.service.ISuspendLogService; -import com.xxl.job.core.context.XxlJobHelper; -import com.xxl.job.core.handler.annotation.XxlJob; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.time.LocalDate; -import java.time.ZoneId; -import java.time.ZonedDateTime; -import java.util.Date; -import java.util.List; -import java.util.stream.Collectors; - -@Slf4j -@Component -@RequiredArgsConstructor -public class SuspendExpireJobHandler { - - private final ISuspendLogService iSuspendLogService; - private final IAlarmRecordsService iAlarmRecordsService; - private final IApprovalLogService iApprovalLogService; - - /** - * 挂起时间到期处理 - */ - @XxlJob("suspendExpireJobHandler") - public void suspendExpireJobHandler() { - XxlJobHelper.log("check suspend expire"); -// Date today = getTodayStart(); - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.lt("EXPIRE_TIME", new Date()); - queryWrapper.eq("VALID", "1"); - List suspendLogList = iSuspendLogService.list(queryWrapper); - if (suspendLogList != null && suspendLogList.size() > 0) { - suspendLogList.forEach(suspendLog -> { - suspendLog.setValid("0"); - }); - iSuspendLogService.updateBatchById(suspendLogList); - //更新最新状态 - List alarmIds = suspendLogList.stream().map(SuspendLog::getAlarmId).collect(Collectors.toList()); - List alarmRecordsList = iAlarmRecordsService.changeProcessStatus(alarmIds); - //添加流转日志 - iApprovalLogService.saveSuspendLogs(alarmRecordsList); - } - } - - private Date getTodayStart() { - // 获取当天日期 - LocalDate today = LocalDate.now(); - // 当天日期与午夜时间的组合 - ZonedDateTime todayStart = today.atStartOfDay(ZoneId.systemDefault()); - - // 转换为java.util.Date - return Date.from(todayStart.toInstant()); - } - -} +//package com.casic.missiles.job.handler; +// +//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +//import com.casic.missiles.modular.alarm.entity.AlarmRecords; +//import com.casic.missiles.modular.alarm.entity.SuspendLog; +//import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +//import com.casic.missiles.modular.alarm.service.IApprovalLogService; +//import com.casic.missiles.modular.alarm.service.ISuspendLogService; +//import com.xxl.job.core.context.XxlJobHelper; +//import com.xxl.job.core.handler.annotation.XxlJob; +//import lombok.RequiredArgsConstructor; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.stereotype.Component; +// +//import java.time.LocalDate; +//import java.time.ZoneId; +//import java.time.ZonedDateTime; +//import java.util.Date; +//import java.util.List; +//import java.util.stream.Collectors; +// +//@Slf4j +//@Component +//@RequiredArgsConstructor +//public class SuspendExpireJobHandler { +// +// private final ISuspendLogService iSuspendLogService; +// private final IAlarmRecordsService iAlarmRecordsService; +// private final IApprovalLogService iApprovalLogService; +// +// /** +// * 挂起时间到期处理 +// */ +// @XxlJob("suspendExpireJobHandler") +// public void suspendExpireJobHandler() { +// XxlJobHelper.log("check suspend expire"); +//// Date today = getTodayStart(); +// QueryWrapper queryWrapper = new QueryWrapper<>(); +// queryWrapper.lt("EXPIRE_TIME", new Date()); +// queryWrapper.eq("VALID", "1"); +// List suspendLogList = iSuspendLogService.list(queryWrapper); +// if (suspendLogList != null && suspendLogList.size() > 0) { +// suspendLogList.forEach(suspendLog -> { +// suspendLog.setValid("0"); +// }); +// iSuspendLogService.updateBatchById(suspendLogList); +// //更新最新状态 +// List alarmIds = suspendLogList.stream().map(SuspendLog::getAlarmId).collect(Collectors.toList()); +// List alarmRecordsList = iAlarmRecordsService.changeProcessStatus(alarmIds); +// //添加流转日志 +// iApprovalLogService.saveSuspendLogs(alarmRecordsList); +// } +// } +// +// private Date getTodayStart() { +// // 获取当天日期 +// LocalDate today = LocalDate.now(); +// // 当天日期与午夜时间的组合 +// ZonedDateTime todayStart = today.atStartOfDay(ZoneId.systemDefault()); +// +// // 转换为java.util.Date +// return Date.from(todayStart.toInstant()); +// } +// +//} diff --git a/casic-public/src/main/java/com/casic/missiles/enums/AlarmEnum.java b/casic-public/src/main/java/com/casic/missiles/enums/AlarmEnum.java new file mode 100644 index 0000000..e73e469 --- /dev/null +++ b/casic-public/src/main/java/com/casic/missiles/enums/AlarmEnum.java @@ -0,0 +1,46 @@ +package com.casic.missiles.enums; + + +public enum AlarmEnum { + + + Sloping("Sloping", "倾斜报警"), + Destroy("Destroy", "破坏报警"), + DiscL("DiscL", "左侧断线报警"), + Leak("Leak", "泄露报警"), + DiscR("DiscR", "右侧断线报警"), + VibL("VibL", "左侧振动报警"), + VibR("VibR", "右侧振动报警"); +// VibL("自管", "1"), +// VibL("自管", "1"), +// VibL("自管", "1"); + + private String code; + private String value; + + AlarmEnum(String code, String value) { + this.code = code; + this.value = value; + } + + + public static String getValue(String code){ + for(AlarmEnum approvalStatusEnum :values()){ + if(approvalStatusEnum.code.equals(code)){ + return approvalStatusEnum.value; + } + } + return ""; + } + + + + public String getCode() { + return code; + } + + public String getValue() { + return value; + } + +} diff --git a/casic-public/src/main/java/com/casic/missiles/enums/DeviceDataEnum.java b/casic-public/src/main/java/com/casic/missiles/enums/DeviceDataEnum.java index 3fc6f08..13f5b23 100644 --- a/casic-public/src/main/java/com/casic/missiles/enums/DeviceDataEnum.java +++ b/casic-public/src/main/java/com/casic/missiles/enums/DeviceDataEnum.java @@ -4,11 +4,12 @@ public enum DeviceDataEnum { - DATA_GAS("燃气智能监测终端", "data_gas", "devcode,uptime,logtime,well_code", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime"), - DATA_GAS_LIQUID("燃气智能监测终端(一体化)", "data_gasliquid_gas", "devcode,uptime,logtime,well_code", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime"), - DATA_TUBE_OTHER("管网哨兵", "data_tube_other", "devcode,uptime,logtime,well_code", "DEVCODE,GASVAL, VBAT,SIN,RSRP,SINR,UPTIME,LOGTIME", "logtime"), - DATA_MONITOR_PIPE_OTHER("智能警示桩", "data_monitor_pipe_other", "devcode,uptime,logtime,well_number", "DEVCODE,TEMPERATURE,HUMIDITY,VBAT,PIPE_INCLINE_ALARM,PIPE_BREAK_ALARM,GAS_ALARM,LEFT_OFF_LINE_ALARM,LEFT_VIBRATE_ALARM,RIGHT_OFF_LINE_ALARM,RIGHT_VIBRATE_ALARM,PICTURE_ALARM,LEFT_GAS,RIGHT_GAS,LEFT_LENGTH,RIGHT_LENGTH,LOGTIME,UPTIME ", "logtime"), - DATA_PAN_GAS("场站监测云台", "data_pan_gas", "DEVICE_CODE,,logtime,LEDGER_CODE", "ID,LEDGER_NUMBER,DEVICE_CODE,CONCENTRATION,LOGTIME,DIRCETION,PITCH", "LOGTIME"); + DATA_GAS("燃气智能监测终端", "data_gas", "devcode,uptime,logtime,well_code", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime","cell,uptime"), + DATA_GAS_LIQUID("燃气智能监测终端(一体化)", "data_gasliquid_gas", "devcode,uptime,logtime,well_code", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime","cell,uptime"), + DATA_TUBE_OTHER("管网哨兵", "data_tube_other", "devcode,uptime,logtime,well_code", "DEVCODE,GASVAL, VBAT,SIN,RSRP,SINR,UPTIME,LOGTIME,sig,temp,SS_STATE as ssState", "logtime","VBAT,UPTIME"), + DATA_MONITOR_PIPE_OTHER("智能警示桩", "data_monitor_pipe_other", "devcode,uptime,logtime,well_number", "DEVCODE,TEMPERATURE,HUMIDITY,VBAT,PIPE_INCLINE_ALARM,PIPE_BREAK_ALARM,GAS_ALARM,LEFT_OFF_LINE_ALARM,LEFT_VIBRATE_ALARM,RIGHT_OFF_LINE_ALARM,RIGHT_VIBRATE_ALARM,PICTURE_ALARM,LEFT_GAS,RIGHT_GAS,LEFT_LENGTH,RIGHT_LENGTH,LOGTIME,UPTIME ", "logtime","VBAT as cell,uptime"), + DATA_PAN_GAS("场站监测云台", "data_pan_gas", "DEVICE_CODE,,logtime,LEDGER_CODE", "ID,LEDGER_NUMBER,DEVICE_CODE,CONCENTRATION,LOGTIME,DIRCETION,PITCH", "LOGTIME","CONCENTRATION as cell ,LOGTIME as uptime"), + DATA_GAS_OTHER("管网哨兵(一体化)", "data_gas_other", "devcode,uptime,logtime,well_code", "DEVCODE,GASVAL, VBAT,SIN,RSRP,SINR,UPTIME,LOGTIME,sig,temp,SS_STATE as ssState", "logtime","VBAT,UPTIME"); public static DeviceDataEnum typeOf(String type) { DeviceDataEnum deviceDataEnum = null; @@ -28,6 +29,9 @@ case "燃气智能监测终端(一体化)": deviceDataEnum = DATA_GAS_LIQUID; break; + case "管网哨兵(一体化)": + deviceDataEnum = DATA_GAS_OTHER; + break; default: deviceDataEnum = null; } @@ -39,13 +43,15 @@ String tableColumns; String orderColumn; String type; + String cellColumn; - DeviceDataEnum(String type, String tableName, String queryColumns, String tableColumns, String orderColumn) { + DeviceDataEnum(String type, String tableName, String queryColumns, String tableColumns, String orderColumn,String cellColumn) { this.type = type; this.queryColumns = queryColumns; this.tableName = tableName; this.tableColumns = tableColumns; this.orderColumn = orderColumn; + this.cellColumn = cellColumn; ; } @@ -98,4 +104,12 @@ public void setType(String type) { this.type = type; } + + public String getCellColumn() { + return cellColumn; + } + + public void setCellColumn(String cellColumn) { + this.cellColumn = cellColumn; + } } diff --git a/casic-public/src/main/java/com/casic/missiles/enums/DeviceTypeEnum.java b/casic-public/src/main/java/com/casic/missiles/enums/DeviceTypeEnum.java index b372b6b..11cd89a 100644 --- a/casic-public/src/main/java/com/casic/missiles/enums/DeviceTypeEnum.java +++ b/casic-public/src/main/java/com/casic/missiles/enums/DeviceTypeEnum.java @@ -20,7 +20,8 @@ KAD("点型可燃气体探测器", 16,"data_kad"), PANTILT("激光甲烷云台", 17,"data_pan_gas"), PRESSURE("压力监测终端", 18,"data_pressure"), - GasDector("点型可燃气体探测器", 19,"data_gas_dector"); + GasDector("点型可燃气体探测器", 19,"data_gas_dector"), + LGGasOther("管网哨兵(一体化)", 20,"data_gas_other"); // 成员变量 private String name; diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/sensorHub/resolver/ResponseResolver.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/sensorHub/resolver/ResponseResolver.java index 09029f4..fda60a0 100644 --- a/casic-rest-api/src/main/java/com/casic/missiles/modular/sensorHub/resolver/ResponseResolver.java +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/sensorHub/resolver/ResponseResolver.java @@ -3,10 +3,7 @@ import com.alibaba.fastjson.JSONObject; import com.casic.missiles.enums.DeviceTypeEnum; import com.casic.missiles.modular.data.service.IDataAbstractService; -import com.casic.missiles.modular.data.service.impl.DataGasServiceImpl; -import com.casic.missiles.modular.data.service.impl.DataGasliquidGasServiceImpl; -import com.casic.missiles.modular.data.service.impl.DataMonitorPipeOtherServiceImpl; -import com.casic.missiles.modular.data.service.impl.DataTubeOtherServiceImpl; +import com.casic.missiles.modular.data.service.impl.*; import com.casic.missiles.util.SpringContextUtil; import org.springframework.stereotype.Component; @@ -21,6 +18,7 @@ private static DataGasliquidGasServiceImpl dataGasliquidGasService = SpringContextUtil.getApplicationContext().getBean(DataGasliquidGasServiceImpl.class); private static DataTubeOtherServiceImpl dataTubeOtherService = SpringContextUtil.getApplicationContext().getBean(DataTubeOtherServiceImpl.class); private static DataMonitorPipeOtherServiceImpl dataMonitorPipeOtherService = SpringContextUtil.getApplicationContext().getBean(DataMonitorPipeOtherServiceImpl.class); + private static DataGasOtherServiceImpl dataGasOtherService = SpringContextUtil.getApplicationContext().getBean(DataGasOtherServiceImpl.class); private static Map abstractResponseHashMap = new HashMap(); static { @@ -32,6 +30,7 @@ abstractResponseHashMap.put(DeviceTypeEnum.TubeOther.name(), dataTubeOtherService); abstractResponseHashMap.put(DeviceTypeEnum.MonitorPipeOther.name(), dataMonitorPipeOtherService); abstractResponseHashMap.put(DeviceTypeEnum.LG.name(), dataGasliquidGasService); + abstractResponseHashMap.put(DeviceTypeEnum.LGGasOther.name(), dataGasOtherService); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java index 03cb6a3..2aead9a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -65,7 +65,7 @@ //策略配置 .strategyConfig(builder -> { - builder.addInclude("sync_log","sync_log_detail") // 设置需要生成的表名 + builder.addInclude("data_gas_other") // 设置需要生成的表名 .addTablePrefix() // 设置过滤表前缀 .entityBuilder() //实体类配置 .enableLombok() //使用lombok diff --git a/casic-web/src/main/resources/config/application-dev.yml b/casic-web/src/main/resources/config/application-dev.yml index f5f95d4..dc535ea 100644 --- a/casic-web/src/main/resources/config/application-dev.yml +++ b/casic-web/src/main/resources/config/application-dev.yml @@ -22,16 +22,17 @@ redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer casic: #kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/websocket/*,/v2/api-docs,/v2/api-docs-ext,/doc.html,/v2/api-docs/swagger-ui.html,/swagger-resources,/webjars/**,/device/receiveData,/alarmReturn,/getMap,/system/busGrid/synAllGrids,/system/busLedger/synAllLedger,/system/busLedger/synAllDept,/system/ctUser/synAllUsers,/sync/token + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/websocket/*,/v2/api-docs,/v2/api-docs-ext,/doc.html,/v2/api-docs/swagger-ui.html,/swagger-resources,/webjars/**,/device/receiveData,/alarmReturn,/getMap,/system/busGrid/synAllGrids,/system/busLedger/synAllLedger,/system/busLedger/synAllDept,/system/ctUser/synAllUsers,/sync/token,/ptz/acceptGasData,/ptz/acceptAlarmData #flowable数据源和多数据源配置 db: init: enable: false brAppUrl: http://10.30.7.26:20115/monitorDataReceive/alarmPush brPanGetDevcodeUrl: http://172.17.240.116:9092/ranshitong/device/getOneDevice - brPanControlUrl: http://172.17.240.116:9092/HkController/controCearm - brPanVideoUrl: http://172.17.240.116:9092/HkController/getPlayBackUrl - brPanRealVideoUrl: http://172.17.240.116:9092/HkController/getUrl + brPanControlUrl: http://172.17.240.116:9092/HK/controCearm + brPanVideoUrl: http://172.17.240.116:9092/HK/getPlayBackUrl + brPanRealVideoUrl: http://172.17.240.116:9092/HK/getUrl + brSendConfigUrl: http://172.17.112.21:4011 enabled: true smartcity: config: diff --git a/casic-web/src/main/resources/config/application.yml b/casic-web/src/main/resources/config/application.yml index cf7d8ea..a9e6b20 100644 --- a/casic-web/src/main/resources/config/application.yml +++ b/casic-web/src/main/resources/config/application.yml @@ -31,7 +31,7 @@ export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ knife4j: - groups: 设备、台账基础信息相关包:com.casic.missiles.modular.device,基础业务包:com.casic.missiles.modular.system,报警业务包:com.casic.missiles.modular.alarm,app端业务包:com.casic.missiles.modular.app,sensorHub端业务包:com.casic.missiles.modular.sensorHub,第三方app端对接业务包:com.casic.missiles.modular.appOther + groups: 设备、台账基础信息相关包:com.casic.missiles.modular.device,基础业务包:com.casic.missiles.modular.system,报警业务包:com.casic.missiles.modular.alarm,app端业务包:com.casic.missiles.modular.app,sensorHub端业务包:com.casic.missiles.modular.sensorHub,第三方app端对接业务包:com.casic.missiles.modular.appOther,云台对接业务包:com.casic.missiles.modular.ptz device: redis: invalid-time: 86400 diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java new file mode 100644 index 0000000..fc881a1 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.data.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 外协管盯 前端控制器 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RestController +@RequestMapping("/system/dataGasOther") +public class DataGasOtherController { + +} + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java new file mode 100644 index 0000000..b5f3627 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.data.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 外协管盯 Mapper 接口 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Mapper +public interface DataGasOtherMapper extends BaseMapper { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml new file mode 100644 index 0000000..8ce1455 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID, DEVCODE, WELL_CODE, WELL_NUMBER, GASVAL, VBAT, BATSTA, SIN, RSRP, SINR, UPTIME, LOGTIME, SIG, TEMP, SS_STATE + + + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java new file mode 100644 index 0000000..53972ba --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java @@ -0,0 +1,94 @@ +package com.casic.missiles.modular.data.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 外协管盯 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Builder +@Data +@TableName("data_gas_other") +@ApiModel(value = "DataGasOther对象", description = "外协管盯") +public class DataGasOther implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId("ID") + private Long id; + + @ApiModelProperty("设备编号") + @TableField("DEVCODE") + private String devcode; + + @ApiModelProperty("点位编号") + @TableField("WELL_CODE") + private String wellCode; + + @ApiModelProperty("位号") + @TableField("WELL_NUMBER") + private String wellNumber; + + @ApiModelProperty("气体浓度采样值") + @TableField("GASVAL") + private String gasval; + + @ApiModelProperty("设备电池电压值(毫伏)") + @TableField("VBAT") + private String vbat; + + @ApiModelProperty("电池状态0 正常、 1 低电告警、2 关机") + @TableField("BATSTA") + private String batsta; + + @ApiModelProperty("接收信号强度等级") + @TableField("SIN") + private String sin; + + @ApiModelProperty("接收信号参考质量 服务小 区的 RSRP 值") + @TableField("RSRP") + private String rsrp; + + @ApiModelProperty("信噪比") + @TableField("SINR") + private String sinr; + + @ApiModelProperty("采集时间") + @TableField("UPTIME") + private Date uptime; + + @ApiModelProperty("上传时间") + @TableField("LOGTIME") + private Date logtime; + + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态,0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java index 86077b8..f4d4417 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java @@ -76,4 +76,17 @@ private Date logtime; + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态:0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java new file mode 100644 index 0000000..842ca0b --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.data.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.data.entity.DataGasOther; + +/** + *

+ * 外协管盯 服务类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +public interface IDataGasOtherService extends IService { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java new file mode 100644 index 0000000..4c660e9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java @@ -0,0 +1,226 @@ +package com.casic.missiles.modular.data.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.enums.DeviceTypeEnum; +import com.casic.missiles.enums.DictEnum; +import com.casic.missiles.modular.alarm.dto.AlarmDeviceRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.AlarmRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.BusAlarmLedgerDTO; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.data.dao.DataGasMapper; +import com.casic.missiles.modular.data.dao.DataGasOtherMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import com.casic.missiles.modular.data.entity.DataTubeOther; +import com.casic.missiles.modular.data.service.IDataAbstractService; +import com.casic.missiles.modular.data.service.IDataGasOtherService; +import com.casic.missiles.modular.data.service.ITrackLogService; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Optional; + +/** + *

+ * 外协管盯 服务实现类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RequiredArgsConstructor +@Service +public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { + + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + private final DataGasMapper dataGasMapper; + private final IAlarmRecordsService alarmRecordsService; + private final IAlarmRuleService alarmRuleService; + private final ITrackLogService iTrackLogService; + private final IBusDeviceService busDeviceService; + + @Override + public void process(String dataContent) { + + //解析数据+根据业务处理存储数据 + JSONObject json = JSONObject.parseObject(dataContent); + String devCode = json.get("devCode").toString(); + JSONObject jsonObject = json.getJSONObject("mBody"); + if (mType[0].equals(json.get("mType")) || mType[3].equals(json.get("mType"))) {//存储上报数据 + this.processNormalData(jsonObject, devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + this.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.TubeOther.name().equals(json.get("devType"))) { + if ("TubeOtherConfigSuccess".equals(jsonObject.get("bType"))) { +// deviceConfigManager.updateStatus(devCode); + } + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } else if (mType[4].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); +// imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; + try { + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); + } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + } + } + + @Transactional + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.getString("cell"); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = jsonObject.getJSONArray("datas"); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + String bfcf = busDeviceService.getBfcf(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).getString("gasval"); + String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); + String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); + String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataGasOther.builder() + .wellCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .wellNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .devcode(devCode) +// .cell(cell) + .gasval(gas) + .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime))) + .logtime(new Date()) + .vbat(vbat) + .batsta(batsta) + .rsrp(rsrp) + .sin(pci) + .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) + .build());//存储采集数据 + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) continue; + + //3.清除设备告警 + alarmRecordsService.cancelDeviceAlarm(devCode); + //4.存报警 + //若没绑定井,则不产生报警 + boolean alarmFlag = false; + if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { + //获取报警规则 + List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); + for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { + if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && + Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { + alarmFlag = true; + //写入报警 + //1、判断报警是否已存在 + if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.TubeOther.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); + //7.更新管线状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java index d248540..b33a1ee 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java @@ -91,7 +91,6 @@ } - public List getBusAlarmLedgerList(String devCode) { return this.dataGasMapper.getListByDevCode(devCode); } @@ -113,6 +112,13 @@ for (int i = 0; i < jsonArray.size(); i++) { try { String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) .findFirst(); @@ -175,18 +181,18 @@ alarmRecordsService.cancelDeviceAlarm(devCode); //4.存报警 //若没绑定井,则不产生报警 - boolean alarmFlag = false; + boolean alarmFlag = false; if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { //获取报警规则 List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { - alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); } break; } @@ -197,7 +203,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及设备状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新监测井状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java index e848fce..6297093 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java @@ -84,42 +84,78 @@ } - @Transactional - public void processAlarmData(JSONObject jsonObject, String devCode) { - JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + public void processEventAlarm(String devCode, String eventTypeCode, String logTime, String eventValue) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - //获取报警事件 - List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - - List busWellDTOList = dataGasMapper.getListByDevCode(devCode); - //若没绑定井,则不产生报警 - if (busWellDTOList != null && busWellDTOList.size() > 0) { - - for (int i = 0; i < jsonArray.size(); i++) { + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + //特殊处理消警 + if ("0".equals(eventValue)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, eventTypeCode); + } + return; } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> eventTypeCode.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 - if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + if (!alarmDeviceRuleResponseDTO.isPresent()) return; //1.查询是否已存在该类报警 - if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) return; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); - - + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + } + } + } + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + try { + String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmEventCode)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } } } } @@ -169,7 +205,76 @@ .rightVibrateAlarm(VibR) .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(uptime))) .logtime(new Date()) - .build());//存储采集数据 + .build()); + + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + ruleResponseDTOList.forEach(ruleResponseDTO -> { + + if ("Sloping".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Sloping)&&(!alarmRecordsService.isWatchAlarms(devCode,"Sloping"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Sloping", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Sloping)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Sloping"); + + } + } + if ("Destroy".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Destroy)&&(!alarmRecordsService.isWatchAlarms(devCode,"Destroy"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Destroy", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Destroy)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Destroy"); + + } + } + if ("Leak".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Leak)&&(!alarmRecordsService.isWatchAlarms(devCode,"Leak"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Leak", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Leak)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Leak"); + + } + } + if ("DiscL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscL)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscL"); + + } + } + if ("DiscR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscR)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscR"); + } + } + + if ("VibL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibL)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibL"); + } + } + if ("VibR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibR)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibR"); + } + } + }); + +// //处理报警事件 +// processEventAlarm(devCode,"Sloping",uptime,Sloping); +// processEventAlarm(devCode,"Destroy",uptime,Destroy); +// processEventAlarm(devCode,"Leak",uptime,Leak); +// processEventAlarm(devCode,"DiscL",uptime,DiscL); +// processEventAlarm(devCode,"DiscR",uptime,DiscR); +// processEventAlarm(devCode,"VibL",uptime,VibL); +// processEventAlarm(devCode,"VibR",uptime,VibR); + //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -197,7 +302,7 @@ if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && gas >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), gas)) { @@ -213,7 +318,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R,alarmFlag?"燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R, alarmFlag ? "燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java index f913775..895d201 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java @@ -89,6 +89,7 @@ String bfcf = busDeviceService.getBfcf(devCode); if (DictEnum.BF_ON.equals(bfcf)) { JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); //获取报警事件 List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); List busWellDTOList = dataGasMapper.getListByDevCode(devCode); @@ -96,25 +97,43 @@ if (busWellDTOList != null && busWellDTOList.size() > 0) { for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 if (!alarmDeviceRuleResponseDTO.isPresent()) continue; //1.查询是否已存在该类报警 if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { @@ -141,6 +160,9 @@ String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); gas = String.format("%.2f", Double.valueOf(gas)); //1.存数据 save(DataTubeOther.builder() @@ -156,6 +178,9 @@ .rsrp(rsrp) .sin(pci) .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) .build());//存储采集数据 //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -186,7 +211,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 98e736b..2288075 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -216,5 +216,15 @@ public ReturnDTO syncDeviceStatus() { return ReturnUtil.success(iBusDeviceService.syncDeviceStatus()); } + + @ApiOperation("根据闸井id获取设备信息") + @PostMapping("/getListByWellId") + @ResponseBody + public ReturnDTO getListByWellId(@RequestBody IdDTO idDTO) { + Assert.isFalse(ObjectUtil.isEmpty(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iBusDeviceService.getListByWellId(idDTO.getId())); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java index 72a2d84..d6d9743 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java @@ -85,6 +85,7 @@ return ReturnUtil.success(iBusLedgerService.detail(idDTO.getId())); } + /** * 同步三级部门 * diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java index 9e412d2..4316b56 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java @@ -1,22 +1,33 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.response.ErrorResponseData; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; +import com.casic.missiles.modular.device.dto.BusPositionImportDTO; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.ReturnUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataAccessException; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; /** @@ -40,8 +51,44 @@ @PostMapping("/addPosition") @ResponseBody public ReturnDTO addPosition(@RequestBody BusLedgerPipe busLedgerPipe) { + + List busLedgerPipeList = iBusLedgerPipeService.getListByNumber(busLedgerPipe.getTagNumber()); + if(busLedgerPipeList!=null&&busLedgerPipeList.size()>0){ + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE,"安装位号已存!!!"); + } + Long id =IdUtil.getSnowflake(1,2).nextId(); + busLedgerPipe.setId(id); iBusLedgerPipeService.save(busLedgerPipe); - return ReturnUtil.success(busLedgerPipe.getId()); + return ReturnUtil.success(id); + } + + @ApiOperation("批量导入") + @RequestMapping(value = "/batchImport", method = RequestMethod.POST) + @ResponseBody + public Object batchImport(@RequestParam("file") MultipartFile file) { + List results = new ArrayList<>(); + try { + results = this.importExcel(BusPositionImportDTO.class, file, null, null); + List list = iBusLedgerPipeService.addPositionBatch(results); + if (!CollectionUtil.isEmpty(list)) { + //获取校验报错信息 + return new ErrorResponseData(list.get(0)); + } + } catch (Exception e) { + return catchMybatisPlusException(e, "导入位置信息失败"); + } + return ResponseData.success(); + } + + private ResponseData catchMybatisPlusException(Exception e, String errorMsg) { + if (e instanceof DataAccessException) { + DataAccessException mybatisPlusException = (DataAccessException) e; + String message = mybatisPlusException.getRootCause().getMessage(); + if (message.contains("Duplicate entry '")) { + return new ErrorResponseData("安装位号重复:" + message.replaceAll("Duplicate entry '", "").replaceAll("' for key 'DEVCODE'", "")); + } + } + return new ErrorResponseData(errorMsg); } @ApiOperation("编辑点位") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java index d1e08a8..d938876 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java @@ -51,6 +51,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getOperatorName()), "CREATE_USER", request.getOperatorName()); queryWrapper.ge(ObjectUtil.isNotEmpty(request.getStartTime()), "START_TIME", request.getStartTime()); queryWrapper.le(ObjectUtil.isNotEmpty(request.getEndTime()), "END_TIME", request.getEndTime()); + queryWrapper.orderByDesc("START_TIME"); return ReturnUtil.success(super.packForBT(iSyncLogService.page(page, queryWrapper))); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java index 5ee5291..23ddee9 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java @@ -73,4 +73,12 @@ " where bd.DEVCODE= #{devcode} and bd.VALID=1 " + ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD asc") List getDeviceTypeRule(@Param("devcode") String devcode); + + + @Select("SELECT bd.* from bus_device bd " + + "left JOIN bus_device_ledger bl on bd.id= bl.DEVICE_ID and bl.VALID=1 " + + "LEFT JOIN bus_ledger_all_view bv on bv.id= bl.LEDGER_ID and bv.type= bl.TYPE and bv.VALID=1 " + + "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") + List getListByWellId(@Param("wellId") Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java index e1d16c4..a4c3f7a 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java @@ -37,7 +37,7 @@ @Select("SELECT b.ORG_ID,b.ORG_CODE,b.ORG_NAME,b.PARENT_ID FROM `bus_sync_org_relation` b WHERE b.DEL_FLAG =0 and b.PARENT_ID = #{syncId} ") List synDept(@Param("syncId") String syncId); - @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view ") + @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view where VALID=1") List getBusLedgers(); @Select("SELECT DEVCODE FROM `bus_device` where VALID>0 ") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml index 99ef10b..c6d1fff 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml @@ -29,6 +29,7 @@ bp.DEVICE_MODEL as deviceModel, bt.TYPE_NAME as typeName, + bp.DATA_SERVICE as deviceCategory, bm.`NAME` as manufactureName, bl.tagNumber as tagNumber, bl.id as ledgerId, @@ -81,6 +82,10 @@ and bd.LOGTIME #{request.logTime2} + + and bp.DATA_SERVICE =#{request.deviceCategory} + + ORDER BY bd.INSTALL_DATE DESC diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml index bdadb6a..d3f4684 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml @@ -40,7 +40,7 @@ `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + AND bdl.VALID = 1 JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -99,8 +99,8 @@ bm.`NAME` as manufactureName FROM `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE - LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID and bdl.type=blp.type + AND bdl.VALID = 1 LEFT JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -117,7 +117,9 @@ WITH station_temp as(SELECT bl.ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID FROM `bus_ledger` bl where bl.VALID=1 and bl.TYPE =2) - select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME from station_temp bl + select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME,bd.DEVCODE from station_temp bl left join bus_device_ledger bdl on bdl.LEDGER_ID = bl.ID and bdl.TYPE =2 and bdl.valid=1 left join bus_device bd on bd.id= bdl.DEVICE_ID and bd.VALID=1 order by bl.ID diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml index 7b92b04..1d97c64 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml @@ -184,7 +184,7 @@ WHERE EQ_LOCNO like 'N%' and - EQ_CATEGORY in (1,3) + EQ_CATEGORY in (1,2,3,5) diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java index 859cf08..143b42d 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java @@ -23,6 +23,9 @@ @ApiModelProperty("设备类型id") private Long typeId; + @ApiModelProperty("产品名称") + private String productName; + @ApiModelProperty("指令集合") private List commandConfigList; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java index 646610b..2cb5894 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("最新上传结束时间") private String logTime2; + + @ApiModelProperty("设备类别(0:自有设备,1:数据服务)") + private String deviceCategory; } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java index 8c95537..28b30fa 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java @@ -44,6 +44,9 @@ @ExcelProperty("关联管线") private String pipeCode; + @ExcelProperty("监测类型") + private String monitorType; + private String watchObject; private Long deviceType; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java index 0980c34..ac5daf0 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java @@ -24,4 +24,7 @@ @ApiModelProperty("详细位置") private String position; + @ApiModelProperty("1:其他,3:管线") + private String type; + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java new file mode 100644 index 0000000..bce7ebd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.device.dto; + + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class BusPositionImportDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + + @ExcelProperty("管线编号") + private String pipeCode; + + @ExcelProperty("安装位号") + private String tagNumber; + + @ExcelProperty("经度(高德)") + private String lngGaode; + + @ExcelProperty("纬度(高德)") + private String latGaode; + + @ExcelProperty("详细位置") + private String position; + + @ExcelProperty("管理单位") + private Long deptid; + + @ExcelProperty("位置类别") + private String type; + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java index 58faa0e..d72ae78 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java @@ -16,13 +16,13 @@ private String deviceId; //移动命令:left right up down left_up left_down right_up right_down GOTO_PRESET - @ApiModelProperty("移动命令") + @ApiModelProperty("移动命令(left right up down left_up left_down right_up right_down)") private String command; - @ApiModelProperty("速度") + @ApiModelProperty("速度,一般传100") private String speed; - @ApiModelProperty("启停命令") + @ApiModelProperty("启停命令(0:开始,1:结束)") private String cameraAction; @ApiModelProperty("预置点编号") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java index b4ec73c..5a3d0b0 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java @@ -66,7 +66,7 @@ private String powerSupplyMode; - @ApiModelProperty("是否结束数据服务") + @ApiModelProperty("是否结束数据服务(1:是,0:否)") @TableField("DATA_SERVICE") private String dataService; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java index 1184995..407e3c1 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java @@ -193,10 +193,14 @@ @TableField(exist = false) private String bfztName; + @ApiModelProperty("设备类别(0:自有设备,1:数据服务)") + @TableField(exist = false) + private String deviceCategory; + public BusDevice() { } - public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds) { + public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds, String monitorType) { this.devcode = devcode; this.deviceType = deviceType; this.productId = productId; @@ -204,6 +208,7 @@ this.installDate = installDate; this.watchObject = watchObject; this.ledgerIds = ledgerIds; + this.monitorType = monitorType; } public static List convertDeviceList(List dtoList) { @@ -227,7 +232,8 @@ deviceImportDTO.getValid(), deviceImportDTO.getInstallDate(), deviceImportDTO.getWatchObject(), - deviceImportDTO.getLedgerIds())); + deviceImportDTO.getLedgerIds(), + deviceImportDTO.getMonitorType())); }); return busDeviceList; } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java index 12b52de..1ac8455 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java @@ -1,16 +1,20 @@ package com.casic.missiles.modular.device.entity; +import cn.hutool.core.util.IdUtil; 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 com.casic.missiles.modular.device.dto.BusPositionImportDTO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import java.io.Serializable; +import java.util.ArrayList; import java.util.Date; +import java.util.List; /** *

@@ -29,7 +33,7 @@ private static final long serialVersionUID = 1L; @ApiModelProperty("主键") - @TableId(value = "ID", type = IdType.AUTO) +// @TableId(value = "ID", type = IdType.AUTO) private Long id; @ApiModelProperty("编号") @@ -60,6 +64,10 @@ @TableField("DEPTID") private Long deptid; + @ApiModelProperty("类别(1:其他,3:管线)") + @TableField("`TYPE`") + private String type; + @ApiModelProperty("责任部门") @TableField("RESPONSIBLE_DEPT") private Long responsibleDept; @@ -110,9 +118,10 @@ public BusLedgerPipe() { } - public BusLedgerPipe(String pipeCode, String ledgerName, String tagNumber, + public BusLedgerPipe(Long id,String pipeCode, String ledgerName, String tagNumber, String lngGaode, String latGaode, String position, - Long deptid, String devcode) { + Long deptid, String devcode, String type) { + this.id=id; this.pipeCode = pipeCode; this.ledgerName = ledgerName; this.tagNumber = tagNumber; @@ -121,5 +130,26 @@ this.position = position; this.deptid = deptid; this.devcode = devcode; + this.type = type; } + + public static List convertDeviceList(List dtoList) { + + + List busDeviceList = new ArrayList<>(); + dtoList.forEach(positionImportDTO -> { + + busDeviceList.add(new BusLedgerPipe(IdUtil.getSnowflake(1,2).nextId(),positionImportDTO.getPipeCode(), + positionImportDTO.getTagNumber(), + positionImportDTO.getTagNumber(), + positionImportDTO.getLngGaode(), + positionImportDTO.getLatGaode(), + positionImportDTO.getPosition(), + positionImportDTO.getDeptid(), + "", + positionImportDTO.getType())); + }); + return busDeviceList; + } + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java index aaaa409..63c0576 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java @@ -52,4 +52,8 @@ List getDeviceRule(String devcode); + List getDevicesByCodes(List devcodes); + + List getListByWellId(Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java index 14f6a93..8692383 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java @@ -2,11 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; -import com.casic.missiles.core.datascope.DataScope; -import com.casic.missiles.modular.device.dto.BusLedgerPipeMonitorRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeResponseDTO; -import com.casic.missiles.modular.device.dto.MonitorDataRequestDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import java.util.List; @@ -26,17 +22,21 @@ Page monitorPipePageList(Page page, BusLedgerPipeMonitorRequestDTO request); - BusLedgerPipeResponseDTO detail(Long id,String devcode); + BusLedgerPipeResponseDTO detail(Long id, String devcode); - List> watchDataByPipe(MonitorDataRequestDTO requestDTO); + List> watchDataByPipe(MonitorDataRequestDTO requestDTO); - List> pipeList(); + List> pipeList(); - List> deviceList(); + List> deviceList(); BusLedgerPipe saveBusLedgerPipe(BusLedgerPipe busLedgerPipe); Boolean updateMonitorStatus(List tagNumbers); + List addPositionBatch(List results); + + List getListByNumber(String tagNumber); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java index 66ed812..ad72230 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java @@ -12,9 +12,12 @@ import com.casic.missiles.modular.device.dto.BusConfigOtherDTO; import com.casic.missiles.modular.device.dto.BusConfigRequestDTO; import com.casic.missiles.modular.device.entity.BusConfig; +import com.casic.missiles.modular.device.entity.BusDevice; import com.casic.missiles.modular.device.service.IBusConfigService; +import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.HttpClientUtils; import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -22,6 +25,9 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.LinkedBlockingDeque; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; /** *

@@ -36,6 +42,11 @@ public class BusConfigServiceImpl extends ServiceImpl implements IBusConfigService { private final AbstractPermissionContext abstractPermissionContext; + private final IBusDeviceService iBusDeviceService; + private final ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(3, 6, 60, TimeUnit.SECONDS, new LinkedBlockingDeque<>(10)); + + @Value("${casic.brSendConfigUrl}") + private String brSendConfigUrl; @Transactional @Override @@ -105,6 +116,42 @@ .operator(user != null ? user.getId() : null) .operatorName(user != null ? user.getName() : "").build()); }); + + + threadPoolExecutor.execute( + () -> { + //发送第三方下发: + if (busConfigOtherDTO.getProductName().contains("管网哨兵")) { + List busDeviceList = iBusDeviceService.getDevicesByCodes(devcodes); + for (BusDevice busDevice : busDeviceList) { + if (ObjectUtil.isAllNotEmpty(busDevice.getNbProductId(), busDevice.getNbDeviceId())) { + Map commandMap = new HashMap<>(); + commandMap.put("productId", busDevice.getNbProductId()); + commandMap.put("devCode", busDevice.getDevcode()); + commandMap.put("deviceId", busDevice.getNbDeviceId()); + commandMap.put("cmdList", busConfigOtherDTO.getCommandConfigList()); + HttpClientUtils.post(brSendConfigUrl+"/tube/config/send", JSON.toJSONString(commandMap)); + } + } + } else if (busConfigOtherDTO.getProductName().contains("智能警示桩")) { + + List busDeviceList = iBusDeviceService.getDevicesByCodes(devcodes); + for (BusDevice busDevice : busDeviceList) { + if (ObjectUtil.isAllNotEmpty(busDevice.getNbProductId(), busDevice.getNbDeviceId())) { + Map commandMap = new HashMap<>(); + commandMap.put("productId", busDevice.getNbProductId()); + commandMap.put("devCode", busDevice.getDevcode()); + commandMap.put("deviceId", busDevice.getNbDeviceId()); + commandMap.put("cmdList", busConfigOtherDTO.getCommandConfigList()); + HttpClientUtils.post(brSendConfigUrl+"/sentinel/config/send", JSON.toJSONString(commandMap)); + } + } + + } + } + ); + + return this.saveBatch(busConfigs); // List> mapList = new ArrayList<>(); // Map commandMap = new HashMap<>(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java index 60d15e5..bae6902 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java @@ -3,6 +3,7 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -80,6 +81,7 @@ @Override public Page listPage(Page page, BusDeviceDTO request) { + page.setOptimizeCountSql(false); Page busDevicePage = this.baseMapper.pageList(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List busDeviceList = busDevicePage.getRecords(); busDeviceList.forEach(busDevice -> { @@ -227,7 +229,7 @@ if (deviceDataEnum.getTableColumns().contains("cell")) { String[] queryColumns = deviceDataEnum.getQueryColumns().split(",", 4); resultMap = this.baseMapper.cellAnalysis(deviceDataEnum.getTableName(), - "cell,uptime", + deviceDataEnum.getCellColumn(), queryColumns[0], queryColumns[1], deviceDataEnum.getOrderColumn(), @@ -265,14 +267,13 @@ } else { List busDeviceLedgers = busDeviceLedgerService.getListByDeviceId(busDevice.getId()); //没绑定关系,先绑定 - if (ObjectUtil.isNotEmpty(busDeviceLedgers)) { + if (busDeviceLedgers == null || busDeviceLedgers.size() < 1) { busDeviceLedgerService.saveDeviceLedger(busDevice.getId(), busDevice.getLedgerIds(), busDevice.getWatchObject()); } else { //已绑定,判断是否位置变了 List ledgerIdsPre = busDeviceLedgers.stream().map(BusDeviceLedger::getLedgerId).collect(Collectors.toList()); if (ledgerIds.containsAll(ledgerIdsPre) && ledgerIdsPre.containsAll(ledgerIds)) { } else { - busDeviceLedgerService.deleteDeviceLedgers(Arrays.asList(busDevice.getId())); busDeviceLedgerService.saveDeviceLedger(busDevice.getId(), busDevice.getLedgerIds(), busDevice.getWatchObject()); } } @@ -304,6 +305,8 @@ List codeList = iBusLedgerService.getCodeLists(); //获取管线编号 List pipeCodeList = iBusLedgerService.getPipeCodeList(); + List pipeList = new ArrayList<>(); + final Integer[] index = {1}; results.forEach(deviceImportDTO -> { index[0]++; @@ -357,22 +360,16 @@ return; } //新增点位 - if ("3".equals(deviceImportDTO.getWatchObject())) { + if ("3".equals(deviceImportDTO.getWatchObject()) || "1".equals(deviceImportDTO.getWatchObject())) { //toDo:安装位号一致,入一次即可 //为管线 - BusLedgerPipe busLedgerPipe = new BusLedgerPipe(deviceImportDTO.getPipeCode(), deviceImportDTO.getTagNumber(), + Long pipeLedgerId = IdUtil.getSnowflake(1, 2).nextId(); + BusLedgerPipe busLedgerPipe = new BusLedgerPipe(pipeLedgerId, deviceImportDTO.getPipeCode(), deviceImportDTO.getTagNumber(), deviceImportDTO.getTagNumber(), deviceImportDTO.getLng(), deviceImportDTO.getLat(), - deviceImportDTO.getPosition(), deviceImportDTO.getDeptid(), deviceImportDTO.getDevCode()); - busLedgerPipe = iBusLedgerPipeService.saveBusLedgerPipe(busLedgerPipe); - deviceImportDTO.setLedgerIds(Arrays.asList(busLedgerPipe.getId())); - }else if("1".equals(deviceImportDTO.getWatchObject())){ - //新增闸井 - BusLedger busLedger = new BusLedger(deviceImportDTO.getTagNumber(), - deviceImportDTO.getTagNumber(),deviceImportDTO.getTagNumber(), - deviceImportDTO.getLng(),deviceImportDTO.getLat(),deviceImportDTO.getPosition(), - deviceImportDTO.getDeptid()); - this.iBusLedgerService.save(busLedger); - deviceImportDTO.setLedgerIds(Arrays.asList(busLedger.getId())); + deviceImportDTO.getPosition(), deviceImportDTO.getDeptid(), deviceImportDTO.getDevCode(), deviceImportDTO.getWatchObject()); +// busLedgerPipe = iBusLedgerPipeService.saveBusLedgerPipe(busLedgerPipe); + pipeList.add(busLedgerPipe); + deviceImportDTO.setLedgerIds(Arrays.asList(pipeLedgerId)); } } @@ -383,6 +380,10 @@ return list; } + if (pipeList != null && pipeList.size() > 0) { + iBusLedgerPipeService.saveBatch(pipeList); + } + List busDeviceList = BusDevice.convertDeviceList(results); //保存设备信息 @@ -514,7 +515,7 @@ } -// @Cacheable(value = "alarmRuleCache", key = "#devcode") + // @Cacheable(value = "alarmRuleCache", key = "#devcode") @Override public List getDeviceRule(String devcode) { List alarmRuleValueList = this.baseMapper.getSpecialDeviceRule(devcode); @@ -523,4 +524,18 @@ } return alarmRuleValueList; } + + + @Override + public List getDevicesByCodes(List devcodes) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("DEVCODE", devcodes); + queryWrapper.eq("VALID", "1"); + return this.baseMapper.selectList(queryWrapper); + } + + @Override + public List getListByWellId(Long wellId) { + return this.baseMapper.getListByWellId(wellId); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java index 5073159..7f8bfdc 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service.impl; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -12,11 +13,8 @@ import com.casic.missiles.enums.DeviceDataEnum; import com.casic.missiles.modular.device.dao.BusDeviceMapper; import com.casic.missiles.modular.device.dao.BusLedgerPipeMapper; -import com.casic.missiles.modular.device.dto.BusLedgerPipeMonitorRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeResponseDTO; -import com.casic.missiles.modular.device.dto.MonitorDataRequestDTO; -import com.casic.missiles.modular.device.entity.BusLedgerPipe; +import com.casic.missiles.modular.device.dto.*; +import com.casic.missiles.modular.device.entity.*; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.server.CommonServer; @@ -24,11 +22,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.stream.Collectors; /** *

@@ -63,6 +60,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getPipeCode()), "PIPE_CODE", request.getPipeCode()); queryWrapper.like(ObjectUtil.isNotEmpty(request.getPosition()), "POSITION", request.getPosition()); queryWrapper.in(ObjectUtil.isNotEmpty(deptIds), "DEPTID", deptIds); + queryWrapper.eq(ObjectUtil.isNotEmpty(request.getType()), "TYPE", request.getType()); Page pipePage = this.page(page, queryWrapper); List pipeList = pipePage.getRecords(); pipeList.forEach(pipe -> { @@ -156,6 +154,12 @@ return busLedgerPipe; } + public List getList() { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("VALID", "1"); + return this.baseMapper.selectList(queryWrapper); + } + @Override public Boolean updateMonitorStatus(List tagNumbers) { UpdateWrapper updateWrapper = new UpdateWrapper<>(); @@ -163,4 +167,43 @@ updateWrapper.set("MONITOR_STATE", "3"); return this.update(updateWrapper); } + + @Transactional + @Override + public List addPositionBatch(List results) { + List list = new ArrayList<>(); + if (!CollectionUtil.isEmpty(results)) { + List busLedgerPipeList = this.getList(); + List tagCodes = busLedgerPipeList.stream().map(BusLedgerPipe::getTagNumber).collect(Collectors.toList()); + final Integer[] index = {1}; + results.forEach(busPositionImportDTO -> { + index[0]++; + //设备编号查重 + if (tagCodes.contains(busPositionImportDTO.getTagNumber())) { + list.add("第" + index[0] + "行,安装位号已存在!"); + return; + } + + }); + if (CollectionUtil.isNotEmpty(list)) { + return list; + } + List busDeviceList = BusLedgerPipe.convertDeviceList(results); + + //保存点位信息 + this.saveBatch(busDeviceList); + + } else { + list.add("导入数据不能为空"); + } + return list; + } + + @Override + public List getListByNumber(String tagNumber) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("VALID", "1"); + queryWrapper.eq("TAG_NUMBER", tagNumber); + return this.baseMapper.selectList(queryWrapper); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java index 5798675..ec2b3f5 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.modular.device.dao.SyncLogMapper; import com.casic.missiles.modular.device.entity.SyncLog; import com.casic.missiles.modular.device.service.ISyncLogDetailService; @@ -39,7 +40,8 @@ syncLog.setUpdateCount(updateCount); syncLog.setAddCount(addCount); syncLog.setDeleteCount(deleteCount); - syncLog.setCreateUser(permissionContext.getAuthService().getLoginUser().getName()); + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + syncLog.setCreateUser(null == authUser ? "admin" : authUser.getName()); return this.baseMapper.insert(syncLog) > 0 ? true : false; } diff --git a/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java index b80c202..6be2b47 100644 --- a/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java +++ b/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -1,56 +1,56 @@ -package com.casic.missiles.job.config; - -import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - - -@Slf4j -@Configuration -@Data -@ConditionalOnExpression("T(org.apache.commons.lang3.StringUtils).isNotEmpty('${xxl.job.admin.addresses}')") -public class XxlJobConfig { - @Value("${xxl.job.admin.addresses}") - private String adminAddresses; - - @Value("${xxl.job.accessToken}") - private String accessToken; - - @Value("${xxl.job.executor.appname}") - private String appname; - -// @Value("${xxl.job.executor.address}") -// private String address; - - @Value("${xxl.job.executor.ip}") - private String ip; - - @Value("${xxl.job.executor.port}") - private int port; - - @Value("${xxl.job.executor.logpath}") - private String logPath; - - @Value("${xxl.job.executor.logretentiondays}") - private int logRetentionDays; - - @Bean - public XxlJobSpringExecutor xxlJobExecutor() { - log.info(">>>>>>>>>>> xxl-job config init."); - XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); - xxlJobSpringExecutor.setAdminAddresses(adminAddresses); - xxlJobSpringExecutor.setAppname(appname); -// xxlJobSpringExecutor.setAddress(address); - xxlJobSpringExecutor.setIp(ip); - xxlJobSpringExecutor.setPort(port); - xxlJobSpringExecutor.setAccessToken(accessToken); - xxlJobSpringExecutor.setLogPath(logPath); - xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); - - return xxlJobSpringExecutor; - } -} +//package com.casic.missiles.job.config; +// +//import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +//import lombok.Data; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.beans.factory.annotation.Value; +//import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; +//import org.springframework.context.annotation.Bean; +//import org.springframework.context.annotation.Configuration; +// +// +//@Slf4j +//@Configuration +//@Data +//@ConditionalOnExpression("T(org.apache.commons.lang3.StringUtils).isNotEmpty('${xxl.job.admin.addresses}')") +//public class XxlJobConfig { +// @Value("${xxl.job.admin.addresses}") +// private String adminAddresses; +// +// @Value("${xxl.job.accessToken}") +// private String accessToken; +// +// @Value("${xxl.job.executor.appname}") +// private String appname; +// +//// @Value("${xxl.job.executor.address}") +//// private String address; +// +// @Value("${xxl.job.executor.ip}") +// private String ip; +// +// @Value("${xxl.job.executor.port}") +// private int port; +// +// @Value("${xxl.job.executor.logpath}") +// private String logPath; +// +// @Value("${xxl.job.executor.logretentiondays}") +// private int logRetentionDays; +// +// @Bean +// public XxlJobSpringExecutor xxlJobExecutor() { +// log.info(">>>>>>>>>>> xxl-job config init."); +// XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); +// xxlJobSpringExecutor.setAdminAddresses(adminAddresses); +// xxlJobSpringExecutor.setAppname(appname); +//// xxlJobSpringExecutor.setAddress(address); +// xxlJobSpringExecutor.setIp(ip); +// xxlJobSpringExecutor.setPort(port); +// xxlJobSpringExecutor.setAccessToken(accessToken); +// xxlJobSpringExecutor.setLogPath(logPath); +// xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); +// +// return xxlJobSpringExecutor; +// } +//} diff --git a/casic-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java index 798424c..3785003 100644 --- a/casic-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java +++ b/casic-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -1,37 +1,37 @@ -package com.casic.missiles.job.handler; - - -import com.xxl.job.core.biz.model.ReturnT; -import com.xxl.job.core.context.XxlJobHelper; -import com.xxl.job.core.handler.annotation.XxlJob; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; - -/** - * XxlJob开发示例(Bean模式) - * - * 开发步骤: - * 1、任务开发:在Spring Bean实例中,开发Job方法; - * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 - * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; - * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; - */ -@Slf4j -@Component -public class DemoJobHandler { - - @XxlJob(value = "demoHandler") - public ReturnT execute(String param) throws Exception { - System.out.println("调度任务Demo执行"); - XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); - -// for (int i = 0; i < 5; i++) { -// XxlJobLogger.log("beat at:" + i); -// TimeUnit.SECONDS.sleep(2); -// } - return SUCCESS; - } - -} +//package com.casic.missiles.job.handler; +// +// +//import com.xxl.job.core.biz.model.ReturnT; +//import com.xxl.job.core.context.XxlJobHelper; +//import com.xxl.job.core.handler.annotation.XxlJob; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.stereotype.Component; +// +//import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; +// +///** +// * XxlJob开发示例(Bean模式) +// * +// * 开发步骤: +// * 1、任务开发:在Spring Bean实例中,开发Job方法; +// * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 +// * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; +// * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; +// */ +//@Slf4j +//@Component +//public class DemoJobHandler { +// +// @XxlJob(value = "demoHandler") +// public ReturnT execute(String param) throws Exception { +// System.out.println("调度任务Demo执行"); +// XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); +// +//// for (int i = 0; i < 5; i++) { +//// XxlJobLogger.log("beat at:" + i); +//// TimeUnit.SECONDS.sleep(2); +//// } +// return SUCCESS; +// } +// +//} diff --git a/casic-job/src/main/java/com/casic/missiles/job/handler/OfflineJobHandler.java b/casic-job/src/main/java/com/casic/missiles/job/handler/OfflineJobHandler.java index 1e6708f..276c5db 100644 --- a/casic-job/src/main/java/com/casic/missiles/job/handler/OfflineJobHandler.java +++ b/casic-job/src/main/java/com/casic/missiles/job/handler/OfflineJobHandler.java @@ -1,26 +1,26 @@ -package com.casic.missiles.job.handler; - -import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; -import com.xxl.job.core.context.XxlJobHelper; -import com.xxl.job.core.handler.annotation.XxlJob; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -@RequiredArgsConstructor -public class OfflineJobHandler { - - private final IAlarmRecordsService iAlarmRecordsService; - - /** - * 离线判断处理 - */ - @XxlJob("offlineJobHandler") - public void offlineJobHandler() { - XxlJobHelper.log("check offline"); - iAlarmRecordsService.processOffline(); - } - -} +//package com.casic.missiles.job.handler; +// +//import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +//import com.xxl.job.core.context.XxlJobHelper; +//import com.xxl.job.core.handler.annotation.XxlJob; +//import lombok.RequiredArgsConstructor; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.stereotype.Component; +// +//@Slf4j +//@Component +//@RequiredArgsConstructor +//public class OfflineJobHandler { +// +// private final IAlarmRecordsService iAlarmRecordsService; +// +// /** +// * 离线判断处理 +// */ +// @XxlJob("offlineJobHandler") +// public void offlineJobHandler() { +// XxlJobHelper.log("check offline"); +// iAlarmRecordsService.processOffline(); +// } +// +//} diff --git a/casic-job/src/main/java/com/casic/missiles/job/handler/SuspendExpireJobHandler.java b/casic-job/src/main/java/com/casic/missiles/job/handler/SuspendExpireJobHandler.java index 5ce8fc2..3610add 100644 --- a/casic-job/src/main/java/com/casic/missiles/job/handler/SuspendExpireJobHandler.java +++ b/casic-job/src/main/java/com/casic/missiles/job/handler/SuspendExpireJobHandler.java @@ -1,65 +1,65 @@ -package com.casic.missiles.job.handler; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.casic.missiles.modular.alarm.entity.AlarmRecords; -import com.casic.missiles.modular.alarm.entity.SuspendLog; -import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; -import com.casic.missiles.modular.alarm.service.IApprovalLogService; -import com.casic.missiles.modular.alarm.service.ISuspendLogService; -import com.xxl.job.core.context.XxlJobHelper; -import com.xxl.job.core.handler.annotation.XxlJob; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.time.LocalDate; -import java.time.ZoneId; -import java.time.ZonedDateTime; -import java.util.Date; -import java.util.List; -import java.util.stream.Collectors; - -@Slf4j -@Component -@RequiredArgsConstructor -public class SuspendExpireJobHandler { - - private final ISuspendLogService iSuspendLogService; - private final IAlarmRecordsService iAlarmRecordsService; - private final IApprovalLogService iApprovalLogService; - - /** - * 挂起时间到期处理 - */ - @XxlJob("suspendExpireJobHandler") - public void suspendExpireJobHandler() { - XxlJobHelper.log("check suspend expire"); -// Date today = getTodayStart(); - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.lt("EXPIRE_TIME", new Date()); - queryWrapper.eq("VALID", "1"); - List suspendLogList = iSuspendLogService.list(queryWrapper); - if (suspendLogList != null && suspendLogList.size() > 0) { - suspendLogList.forEach(suspendLog -> { - suspendLog.setValid("0"); - }); - iSuspendLogService.updateBatchById(suspendLogList); - //更新最新状态 - List alarmIds = suspendLogList.stream().map(SuspendLog::getAlarmId).collect(Collectors.toList()); - List alarmRecordsList = iAlarmRecordsService.changeProcessStatus(alarmIds); - //添加流转日志 - iApprovalLogService.saveSuspendLogs(alarmRecordsList); - } - } - - private Date getTodayStart() { - // 获取当天日期 - LocalDate today = LocalDate.now(); - // 当天日期与午夜时间的组合 - ZonedDateTime todayStart = today.atStartOfDay(ZoneId.systemDefault()); - - // 转换为java.util.Date - return Date.from(todayStart.toInstant()); - } - -} +//package com.casic.missiles.job.handler; +// +//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +//import com.casic.missiles.modular.alarm.entity.AlarmRecords; +//import com.casic.missiles.modular.alarm.entity.SuspendLog; +//import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +//import com.casic.missiles.modular.alarm.service.IApprovalLogService; +//import com.casic.missiles.modular.alarm.service.ISuspendLogService; +//import com.xxl.job.core.context.XxlJobHelper; +//import com.xxl.job.core.handler.annotation.XxlJob; +//import lombok.RequiredArgsConstructor; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.stereotype.Component; +// +//import java.time.LocalDate; +//import java.time.ZoneId; +//import java.time.ZonedDateTime; +//import java.util.Date; +//import java.util.List; +//import java.util.stream.Collectors; +// +//@Slf4j +//@Component +//@RequiredArgsConstructor +//public class SuspendExpireJobHandler { +// +// private final ISuspendLogService iSuspendLogService; +// private final IAlarmRecordsService iAlarmRecordsService; +// private final IApprovalLogService iApprovalLogService; +// +// /** +// * 挂起时间到期处理 +// */ +// @XxlJob("suspendExpireJobHandler") +// public void suspendExpireJobHandler() { +// XxlJobHelper.log("check suspend expire"); +//// Date today = getTodayStart(); +// QueryWrapper queryWrapper = new QueryWrapper<>(); +// queryWrapper.lt("EXPIRE_TIME", new Date()); +// queryWrapper.eq("VALID", "1"); +// List suspendLogList = iSuspendLogService.list(queryWrapper); +// if (suspendLogList != null && suspendLogList.size() > 0) { +// suspendLogList.forEach(suspendLog -> { +// suspendLog.setValid("0"); +// }); +// iSuspendLogService.updateBatchById(suspendLogList); +// //更新最新状态 +// List alarmIds = suspendLogList.stream().map(SuspendLog::getAlarmId).collect(Collectors.toList()); +// List alarmRecordsList = iAlarmRecordsService.changeProcessStatus(alarmIds); +// //添加流转日志 +// iApprovalLogService.saveSuspendLogs(alarmRecordsList); +// } +// } +// +// private Date getTodayStart() { +// // 获取当天日期 +// LocalDate today = LocalDate.now(); +// // 当天日期与午夜时间的组合 +// ZonedDateTime todayStart = today.atStartOfDay(ZoneId.systemDefault()); +// +// // 转换为java.util.Date +// return Date.from(todayStart.toInstant()); +// } +// +//} diff --git a/casic-public/src/main/java/com/casic/missiles/enums/AlarmEnum.java b/casic-public/src/main/java/com/casic/missiles/enums/AlarmEnum.java new file mode 100644 index 0000000..e73e469 --- /dev/null +++ b/casic-public/src/main/java/com/casic/missiles/enums/AlarmEnum.java @@ -0,0 +1,46 @@ +package com.casic.missiles.enums; + + +public enum AlarmEnum { + + + Sloping("Sloping", "倾斜报警"), + Destroy("Destroy", "破坏报警"), + DiscL("DiscL", "左侧断线报警"), + Leak("Leak", "泄露报警"), + DiscR("DiscR", "右侧断线报警"), + VibL("VibL", "左侧振动报警"), + VibR("VibR", "右侧振动报警"); +// VibL("自管", "1"), +// VibL("自管", "1"), +// VibL("自管", "1"); + + private String code; + private String value; + + AlarmEnum(String code, String value) { + this.code = code; + this.value = value; + } + + + public static String getValue(String code){ + for(AlarmEnum approvalStatusEnum :values()){ + if(approvalStatusEnum.code.equals(code)){ + return approvalStatusEnum.value; + } + } + return ""; + } + + + + public String getCode() { + return code; + } + + public String getValue() { + return value; + } + +} diff --git a/casic-public/src/main/java/com/casic/missiles/enums/DeviceDataEnum.java b/casic-public/src/main/java/com/casic/missiles/enums/DeviceDataEnum.java index 3fc6f08..13f5b23 100644 --- a/casic-public/src/main/java/com/casic/missiles/enums/DeviceDataEnum.java +++ b/casic-public/src/main/java/com/casic/missiles/enums/DeviceDataEnum.java @@ -4,11 +4,12 @@ public enum DeviceDataEnum { - DATA_GAS("燃气智能监测终端", "data_gas", "devcode,uptime,logtime,well_code", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime"), - DATA_GAS_LIQUID("燃气智能监测终端(一体化)", "data_gasliquid_gas", "devcode,uptime,logtime,well_code", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime"), - DATA_TUBE_OTHER("管网哨兵", "data_tube_other", "devcode,uptime,logtime,well_code", "DEVCODE,GASVAL, VBAT,SIN,RSRP,SINR,UPTIME,LOGTIME", "logtime"), - DATA_MONITOR_PIPE_OTHER("智能警示桩", "data_monitor_pipe_other", "devcode,uptime,logtime,well_number", "DEVCODE,TEMPERATURE,HUMIDITY,VBAT,PIPE_INCLINE_ALARM,PIPE_BREAK_ALARM,GAS_ALARM,LEFT_OFF_LINE_ALARM,LEFT_VIBRATE_ALARM,RIGHT_OFF_LINE_ALARM,RIGHT_VIBRATE_ALARM,PICTURE_ALARM,LEFT_GAS,RIGHT_GAS,LEFT_LENGTH,RIGHT_LENGTH,LOGTIME,UPTIME ", "logtime"), - DATA_PAN_GAS("场站监测云台", "data_pan_gas", "DEVICE_CODE,,logtime,LEDGER_CODE", "ID,LEDGER_NUMBER,DEVICE_CODE,CONCENTRATION,LOGTIME,DIRCETION,PITCH", "LOGTIME"); + DATA_GAS("燃气智能监测终端", "data_gas", "devcode,uptime,logtime,well_code", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime","cell,uptime"), + DATA_GAS_LIQUID("燃气智能监测终端(一体化)", "data_gasliquid_gas", "devcode,uptime,logtime,well_code", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime","cell,uptime"), + DATA_TUBE_OTHER("管网哨兵", "data_tube_other", "devcode,uptime,logtime,well_code", "DEVCODE,GASVAL, VBAT,SIN,RSRP,SINR,UPTIME,LOGTIME,sig,temp,SS_STATE as ssState", "logtime","VBAT,UPTIME"), + DATA_MONITOR_PIPE_OTHER("智能警示桩", "data_monitor_pipe_other", "devcode,uptime,logtime,well_number", "DEVCODE,TEMPERATURE,HUMIDITY,VBAT,PIPE_INCLINE_ALARM,PIPE_BREAK_ALARM,GAS_ALARM,LEFT_OFF_LINE_ALARM,LEFT_VIBRATE_ALARM,RIGHT_OFF_LINE_ALARM,RIGHT_VIBRATE_ALARM,PICTURE_ALARM,LEFT_GAS,RIGHT_GAS,LEFT_LENGTH,RIGHT_LENGTH,LOGTIME,UPTIME ", "logtime","VBAT as cell,uptime"), + DATA_PAN_GAS("场站监测云台", "data_pan_gas", "DEVICE_CODE,,logtime,LEDGER_CODE", "ID,LEDGER_NUMBER,DEVICE_CODE,CONCENTRATION,LOGTIME,DIRCETION,PITCH", "LOGTIME","CONCENTRATION as cell ,LOGTIME as uptime"), + DATA_GAS_OTHER("管网哨兵(一体化)", "data_gas_other", "devcode,uptime,logtime,well_code", "DEVCODE,GASVAL, VBAT,SIN,RSRP,SINR,UPTIME,LOGTIME,sig,temp,SS_STATE as ssState", "logtime","VBAT,UPTIME"); public static DeviceDataEnum typeOf(String type) { DeviceDataEnum deviceDataEnum = null; @@ -28,6 +29,9 @@ case "燃气智能监测终端(一体化)": deviceDataEnum = DATA_GAS_LIQUID; break; + case "管网哨兵(一体化)": + deviceDataEnum = DATA_GAS_OTHER; + break; default: deviceDataEnum = null; } @@ -39,13 +43,15 @@ String tableColumns; String orderColumn; String type; + String cellColumn; - DeviceDataEnum(String type, String tableName, String queryColumns, String tableColumns, String orderColumn) { + DeviceDataEnum(String type, String tableName, String queryColumns, String tableColumns, String orderColumn,String cellColumn) { this.type = type; this.queryColumns = queryColumns; this.tableName = tableName; this.tableColumns = tableColumns; this.orderColumn = orderColumn; + this.cellColumn = cellColumn; ; } @@ -98,4 +104,12 @@ public void setType(String type) { this.type = type; } + + public String getCellColumn() { + return cellColumn; + } + + public void setCellColumn(String cellColumn) { + this.cellColumn = cellColumn; + } } diff --git a/casic-public/src/main/java/com/casic/missiles/enums/DeviceTypeEnum.java b/casic-public/src/main/java/com/casic/missiles/enums/DeviceTypeEnum.java index b372b6b..11cd89a 100644 --- a/casic-public/src/main/java/com/casic/missiles/enums/DeviceTypeEnum.java +++ b/casic-public/src/main/java/com/casic/missiles/enums/DeviceTypeEnum.java @@ -20,7 +20,8 @@ KAD("点型可燃气体探测器", 16,"data_kad"), PANTILT("激光甲烷云台", 17,"data_pan_gas"), PRESSURE("压力监测终端", 18,"data_pressure"), - GasDector("点型可燃气体探测器", 19,"data_gas_dector"); + GasDector("点型可燃气体探测器", 19,"data_gas_dector"), + LGGasOther("管网哨兵(一体化)", 20,"data_gas_other"); // 成员变量 private String name; diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/sensorHub/resolver/ResponseResolver.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/sensorHub/resolver/ResponseResolver.java index 09029f4..fda60a0 100644 --- a/casic-rest-api/src/main/java/com/casic/missiles/modular/sensorHub/resolver/ResponseResolver.java +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/sensorHub/resolver/ResponseResolver.java @@ -3,10 +3,7 @@ import com.alibaba.fastjson.JSONObject; import com.casic.missiles.enums.DeviceTypeEnum; import com.casic.missiles.modular.data.service.IDataAbstractService; -import com.casic.missiles.modular.data.service.impl.DataGasServiceImpl; -import com.casic.missiles.modular.data.service.impl.DataGasliquidGasServiceImpl; -import com.casic.missiles.modular.data.service.impl.DataMonitorPipeOtherServiceImpl; -import com.casic.missiles.modular.data.service.impl.DataTubeOtherServiceImpl; +import com.casic.missiles.modular.data.service.impl.*; import com.casic.missiles.util.SpringContextUtil; import org.springframework.stereotype.Component; @@ -21,6 +18,7 @@ private static DataGasliquidGasServiceImpl dataGasliquidGasService = SpringContextUtil.getApplicationContext().getBean(DataGasliquidGasServiceImpl.class); private static DataTubeOtherServiceImpl dataTubeOtherService = SpringContextUtil.getApplicationContext().getBean(DataTubeOtherServiceImpl.class); private static DataMonitorPipeOtherServiceImpl dataMonitorPipeOtherService = SpringContextUtil.getApplicationContext().getBean(DataMonitorPipeOtherServiceImpl.class); + private static DataGasOtherServiceImpl dataGasOtherService = SpringContextUtil.getApplicationContext().getBean(DataGasOtherServiceImpl.class); private static Map abstractResponseHashMap = new HashMap(); static { @@ -32,6 +30,7 @@ abstractResponseHashMap.put(DeviceTypeEnum.TubeOther.name(), dataTubeOtherService); abstractResponseHashMap.put(DeviceTypeEnum.MonitorPipeOther.name(), dataMonitorPipeOtherService); abstractResponseHashMap.put(DeviceTypeEnum.LG.name(), dataGasliquidGasService); + abstractResponseHashMap.put(DeviceTypeEnum.LGGasOther.name(), dataGasOtherService); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java index 03cb6a3..2aead9a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -65,7 +65,7 @@ //策略配置 .strategyConfig(builder -> { - builder.addInclude("sync_log","sync_log_detail") // 设置需要生成的表名 + builder.addInclude("data_gas_other") // 设置需要生成的表名 .addTablePrefix() // 设置过滤表前缀 .entityBuilder() //实体类配置 .enableLombok() //使用lombok diff --git a/casic-web/src/main/resources/config/application-dev.yml b/casic-web/src/main/resources/config/application-dev.yml index f5f95d4..dc535ea 100644 --- a/casic-web/src/main/resources/config/application-dev.yml +++ b/casic-web/src/main/resources/config/application-dev.yml @@ -22,16 +22,17 @@ redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer casic: #kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/websocket/*,/v2/api-docs,/v2/api-docs-ext,/doc.html,/v2/api-docs/swagger-ui.html,/swagger-resources,/webjars/**,/device/receiveData,/alarmReturn,/getMap,/system/busGrid/synAllGrids,/system/busLedger/synAllLedger,/system/busLedger/synAllDept,/system/ctUser/synAllUsers,/sync/token + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/websocket/*,/v2/api-docs,/v2/api-docs-ext,/doc.html,/v2/api-docs/swagger-ui.html,/swagger-resources,/webjars/**,/device/receiveData,/alarmReturn,/getMap,/system/busGrid/synAllGrids,/system/busLedger/synAllLedger,/system/busLedger/synAllDept,/system/ctUser/synAllUsers,/sync/token,/ptz/acceptGasData,/ptz/acceptAlarmData #flowable数据源和多数据源配置 db: init: enable: false brAppUrl: http://10.30.7.26:20115/monitorDataReceive/alarmPush brPanGetDevcodeUrl: http://172.17.240.116:9092/ranshitong/device/getOneDevice - brPanControlUrl: http://172.17.240.116:9092/HkController/controCearm - brPanVideoUrl: http://172.17.240.116:9092/HkController/getPlayBackUrl - brPanRealVideoUrl: http://172.17.240.116:9092/HkController/getUrl + brPanControlUrl: http://172.17.240.116:9092/HK/controCearm + brPanVideoUrl: http://172.17.240.116:9092/HK/getPlayBackUrl + brPanRealVideoUrl: http://172.17.240.116:9092/HK/getUrl + brSendConfigUrl: http://172.17.112.21:4011 enabled: true smartcity: config: diff --git a/casic-web/src/main/resources/config/application.yml b/casic-web/src/main/resources/config/application.yml index cf7d8ea..a9e6b20 100644 --- a/casic-web/src/main/resources/config/application.yml +++ b/casic-web/src/main/resources/config/application.yml @@ -31,7 +31,7 @@ export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ knife4j: - groups: 设备、台账基础信息相关包:com.casic.missiles.modular.device,基础业务包:com.casic.missiles.modular.system,报警业务包:com.casic.missiles.modular.alarm,app端业务包:com.casic.missiles.modular.app,sensorHub端业务包:com.casic.missiles.modular.sensorHub,第三方app端对接业务包:com.casic.missiles.modular.appOther + groups: 设备、台账基础信息相关包:com.casic.missiles.modular.device,基础业务包:com.casic.missiles.modular.system,报警业务包:com.casic.missiles.modular.alarm,app端业务包:com.casic.missiles.modular.app,sensorHub端业务包:com.casic.missiles.modular.sensorHub,第三方app端对接业务包:com.casic.missiles.modular.appOther,云台对接业务包:com.casic.missiles.modular.ptz device: redis: invalid-time: 86400 diff --git a/casic-web/src/main/resources/config/temp/device_template.xlsx b/casic-web/src/main/resources/config/temp/device_template.xlsx index 4d254f7..5e28020 100644 --- a/casic-web/src/main/resources/config/temp/device_template.xlsx +++ b/casic-web/src/main/resources/config/temp/device_template.xlsx Binary files differ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java index 1c75346..254643e 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRuleMapper.java @@ -27,7 +27,7 @@ " LEFT JOIN alarm_type at on at.ID=ar.ALARM_TYPE_ID " + "where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + " where bd.DEVCODE= #{devCode} and bd.VALID=1 " + - ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD desc") + ") and ar.ALARM_JUDGE_METHOD=1 order by CAST(ALARM_THRESHOLD AS SIGNED) desc") List getRuleListByCode(@Param("devCode") String devCode); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index f24ca46..2ba4a81 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -34,7 +34,8 @@ lr.latGaode as latGaode, ay.ALARM_TYPE, ay.ALARM_CATEGORY, - ac.ALARM_LEVEL as alarmLevelName + ac.ALARM_LEVEL as alarmLevelName, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -43,6 +44,8 @@ LEFT JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID and lr.type=bl.type AND bl.VALID = 1 AND lr.VALID =1 LEFT JOIN alarm_type ay ON ay.id = rd.ALARM_TYPE_ID LEFT JOIN alarm_level_control ac ON ac.id = rd.ALARM_LEVEL + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=0 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -74,6 +77,9 @@ and ay.ALARM_CATEGORY =#{request.alarmCategory} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -86,7 +92,8 @@ lr.DEPTID as deptid, rd.POSITION, rd.id, - ay.ALARM_TYPE + ay.ALARM_TYPE, + bm.NAME AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -98,6 +105,8 @@ AND lr.VALID =1 LEFT JOIN base_product bp ON bp.id = bd.PRODUCT_ID left join alarm_type ay on ay.id=rd.ALARM_TYPE_ID + left JOIN base_product bpt on bpt.ID = bd.PRODUCT_ID + LEFT JOIN bus_manufacturer bm on bm.ID = bpt.MANUFACTURER_ID where rd.STATUS =1 and rd.EXCEPTION_TYPE=1 and rd.DEVCODE like concat('%', #{request.devCode}, '%') @@ -126,6 +135,9 @@ and bp.MANUFACTURER_ID =#{request.manufacturerId} + + and TIMESTAMPDIFF(HOUR, rd.ALARM_TIME, NOW()) ]]> 48 + ORDER BY rd.ALARM_TIME DESC @@ -648,22 +660,19 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java index fc47c3a..e94bb5a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmRecordDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("是否误报(1:是,真报警,0:否,误报)") private String realAlarm; + @ApiModelProperty("48小时未处置(1:是)") + private String overtime; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 88238cb..6839591 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,10 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("厂商") + @TableField(exist = false) + private String manufactureName; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index 5060ecf..4235acc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -84,8 +84,17 @@ boolean isDeviceAlarmByCode(String devCode, String alarmThreshold); + boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode); + boolean saveAlarms(String devCode, String gas, String upTime, List busWellDTOList, AlarmRuleResponseDTO alarmRuleResponseDTO, String typeName); boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO); + boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId,Long alarmLevelId,String alarmTypeName,String typeName); + + boolean cancelWatchAlarms(String devCode, String code); + + boolean isWatchAlarms(String devCode, String code); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index e8863d3..76c2e9b 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.enums.AlarmEnum; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmRecordsMapper; @@ -131,6 +132,7 @@ @Override public Page historyListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page alarmRecordsPage = this.baseMapper.historyListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List alarmRecordsList = alarmRecordsPage.getRecords(); alarmRecordsList.forEach(alarmRecords -> { @@ -184,6 +186,7 @@ @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request) { + page.setOptimizeCountSql(false); Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); deviceAlarmList.forEach(deviceAlarm -> { @@ -523,6 +526,39 @@ //toDo:需要加流程取消日志 } + @Override + public boolean cancelDeviceAlarmByEventCode(String devCode, String alarmEventCode) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("EXCEPTION_TYPE", "1"); + updateWrapper.ge("ALARM_MSG", alarmEventCode); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean cancelWatchAlarms(String devCode, String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("DEVCODE", devCode); + updateWrapper.eq("ALARM_VALUE", code); + updateWrapper.eq("STATUS", "1"); + updateWrapper.set("STATUS", "0"); + updateWrapper.set("CANCEL_TIME", new Date()); + return this.update(updateWrapper); + } + + @Override + public boolean isWatchAlarms(String devCode, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE",devCode); + queryWrapper.eq("ALARM_VALUE",code); + queryWrapper.eq("STATUS","1"); + ListalarmRecordsList =this.baseMapper.selectList(queryWrapper); + return alarmRecordsList!=null&&alarmRecordsList.size()>0?true:false; + } + /** * 根据设备编号查询是否有设备异常告警记录 * @@ -601,7 +637,7 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), "燃气浓度达到".concat(data).concat("%LEL"), data, alarmRuleResponseDTO.getAlarmLevelId(), CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), - "燃气浓度达到".concat(data).concat("%LEL"), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -642,6 +678,59 @@ return true; } + + @Override + public boolean saveWatchAlarms(String devCode, String data, String upTime, List busWellDTOList, + Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { + + + Long alarmId = SnowFlakeUtil.getId(); + for (BusAlarmLedgerDTO busLedgerDTO : busWellDTOList) { + try { + AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), + busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, + alarmLevelId, CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime)), + alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + this.save(alarmRecords); + alarmId = alarmRecords.getId(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + //保存消息通知 + iMessageLogService.save(new MessageLog(alarmId, DictEnum.MESSAGE_TYPE_1, alarmTypeName, + ObjectUtil.isNotEmpty(busWellDTOList) ? busWellDTOList.get(0).getTagNumber(). + concat("|"). + concat(busWellDTOList.get(0).getLedgerName()). + concat(alarmTypeName).concat(",").concat(AlarmEnum.getValue(data)): "", + ObjectUtil.isNotEmpty(busWellDTOList) ? + busWellDTOList.get(0).getTagNumber() : "")); + final Long alarmIds = alarmId; + //向前端推送websocket报警消息 + threadPoolTaskExecutor.taskExecutor().execute(new Runnable() { + @Override + public void run() { + AlarmLevelControl alarmLevelControl = iAlarmLevelControlService.getById(alarmLevelId); + JSONObject msg = new JSONObject(); + msg.put("alarmType", alarmTypeName); + msg.put("alarmId", alarmIds); + msg.put("tagNumber", busWellDTOList.get(0).getTagNumber()); + msg.put("tagName", busWellDTOList.get(0).getLedgerName()); + msg.put("alarmTime", CommonUtil.DateFormat(upTime)); + msg.put("status", "未读"); + msg.put("value", data); + msg.put("typeName", typeName); + msg.put("alarmLevel", null != alarmLevelControl ? alarmLevelControl.getAlarmLevel() : ""); + msg.put("isSound", null != alarmLevelControl ? alarmLevelControl.getIsSound() : ""); + msg.put("isSend", null != alarmLevelControl ? alarmLevelControl.getIsSend() : ""); + msg.put("alarmNoteMethod", null != alarmLevelControl ? alarmLevelControl.getAlarmNoteMethod() : ""); + webSocket.sendAllMessage(msg.toJSONString()); + } + }); + return true; + } + @Override public boolean saveDeviceAlarms(String devCode, String logTime, List busWellDTOList, Optional alarmRuleResponseDTO) { @@ -682,6 +771,7 @@ //只有未读、已读、已确认、已处置、挂起的才消 queryWrapper.in("PROCESS_STATUS", Arrays.asList("1", "2", "3", "5", "7")); queryWrapper.eq("STATUS", "1"); + queryWrapper.gt("ALARM_VALUE", 0); List alarmRecordsList = this.list(queryWrapper); if (alarmRecordsList != null && alarmRecordsList.size() > 0) { alarmRecordsList.forEach(alarmRecords -> { @@ -697,7 +787,7 @@ null)); //添加消息通知 iMessageLogService.save(new MessageLog(alarmRecordsList.get(0).getId(), DictEnum.MESSAGE_TYPE_3, "报警解除", - alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmContent()). + alarmRecordsList.get(0).getLedgerNumber().concat(alarmRecordsList.get(0).getAlarmMsg()). concat("报警解除"), alarmRecordsList.get(0).getLedgerNumber())); } } @@ -761,7 +851,7 @@ offDeviceDTO.getTagNumber(), offDeviceDTO.getAlarmTypeId(), // offDeviceDTO.getAlarmTypeName(), - "离线超" + offDeviceDTO.getOffDays()+"天", + "离线超" + offDeviceDTO.getOffDays() + "天", offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java new file mode 100644 index 0000000..fc881a1 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/controller/DataGasOtherController.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.data.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 外协管盯 前端控制器 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RestController +@RequestMapping("/system/dataGasOther") +public class DataGasOtherController { + +} + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java new file mode 100644 index 0000000..b5f3627 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/DataGasOtherMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.data.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 外协管盯 Mapper 接口 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Mapper +public interface DataGasOtherMapper extends BaseMapper { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml new file mode 100644 index 0000000..8ce1455 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dao/mapping/DataGasOtherMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID, DEVCODE, WELL_CODE, WELL_NUMBER, GASVAL, VBAT, BATSTA, SIN, RSRP, SINR, UPTIME, LOGTIME, SIG, TEMP, SS_STATE + + + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java new file mode 100644 index 0000000..53972ba --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataGasOther.java @@ -0,0 +1,94 @@ +package com.casic.missiles.modular.data.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 外协管盯 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@Builder +@Data +@TableName("data_gas_other") +@ApiModel(value = "DataGasOther对象", description = "外协管盯") +public class DataGasOther implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId("ID") + private Long id; + + @ApiModelProperty("设备编号") + @TableField("DEVCODE") + private String devcode; + + @ApiModelProperty("点位编号") + @TableField("WELL_CODE") + private String wellCode; + + @ApiModelProperty("位号") + @TableField("WELL_NUMBER") + private String wellNumber; + + @ApiModelProperty("气体浓度采样值") + @TableField("GASVAL") + private String gasval; + + @ApiModelProperty("设备电池电压值(毫伏)") + @TableField("VBAT") + private String vbat; + + @ApiModelProperty("电池状态0 正常、 1 低电告警、2 关机") + @TableField("BATSTA") + private String batsta; + + @ApiModelProperty("接收信号强度等级") + @TableField("SIN") + private String sin; + + @ApiModelProperty("接收信号参考质量 服务小 区的 RSRP 值") + @TableField("RSRP") + private String rsrp; + + @ApiModelProperty("信噪比") + @TableField("SINR") + private String sinr; + + @ApiModelProperty("采集时间") + @TableField("UPTIME") + private Date uptime; + + @ApiModelProperty("上传时间") + @TableField("LOGTIME") + private Date logtime; + + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态,0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java index 86077b8..f4d4417 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/entity/DataTubeOther.java @@ -76,4 +76,17 @@ private Date logtime; + @ApiModelProperty("sig信号强度,1表示信号弱,2表示信号中等,3表示信号强") + @TableField("SIG") + private String sig; + + @ApiModelProperty("温度,扩大100倍传输") + @TableField("TEMP") + private String temp; + + @ApiModelProperty("传感器状态:0表示正常,39表示传感器通讯异常") + @TableField("SS_STATE") + private String ssState; + + } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java new file mode 100644 index 0000000..842ca0b --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/IDataGasOtherService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.data.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.data.entity.DataGasOther; + +/** + *

+ * 外协管盯 服务类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +public interface IDataGasOtherService extends IService { + +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java new file mode 100644 index 0000000..4c660e9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasOtherServiceImpl.java @@ -0,0 +1,226 @@ +package com.casic.missiles.modular.data.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.enums.DeviceTypeEnum; +import com.casic.missiles.enums.DictEnum; +import com.casic.missiles.modular.alarm.dto.AlarmDeviceRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.AlarmRuleResponseDTO; +import com.casic.missiles.modular.alarm.dto.BusAlarmLedgerDTO; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.data.dao.DataGasMapper; +import com.casic.missiles.modular.data.dao.DataGasOtherMapper; +import com.casic.missiles.modular.data.entity.DataGasOther; +import com.casic.missiles.modular.data.entity.DataTubeOther; +import com.casic.missiles.modular.data.service.IDataAbstractService; +import com.casic.missiles.modular.data.service.IDataGasOtherService; +import com.casic.missiles.modular.data.service.ITrackLogService; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Optional; + +/** + *

+ * 外协管盯 服务实现类 + *

+ * + * @author zt + * @since 2025-01-22 + */ +@RequiredArgsConstructor +@Service +public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { + + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + private final DataGasMapper dataGasMapper; + private final IAlarmRecordsService alarmRecordsService; + private final IAlarmRuleService alarmRuleService; + private final ITrackLogService iTrackLogService; + private final IBusDeviceService busDeviceService; + + @Override + public void process(String dataContent) { + + //解析数据+根据业务处理存储数据 + JSONObject json = JSONObject.parseObject(dataContent); + String devCode = json.get("devCode").toString(); + JSONObject jsonObject = json.getJSONObject("mBody"); + if (mType[0].equals(json.get("mType")) || mType[3].equals(json.get("mType"))) {//存储上报数据 + this.processNormalData(jsonObject, devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + this.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.TubeOther.name().equals(json.get("devType"))) { + if ("TubeOtherConfigSuccess".equals(jsonObject.get("bType"))) { +// deviceConfigManager.updateStatus(devCode); + } + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } else if (mType[4].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); +// imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; + try { + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); + } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + } + } + + @Transactional + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.getString("cell"); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = jsonObject.getJSONArray("datas"); + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + String bfcf = busDeviceService.getBfcf(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).getString("gasval"); + String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); + String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); + String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataGasOther.builder() + .wellCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .wellNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .devcode(devCode) +// .cell(cell) + .gasval(gas) + .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(upTime))) + .logtime(new Date()) + .vbat(vbat) + .batsta(batsta) + .rsrp(rsrp) + .sin(pci) + .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) + .build());//存储采集数据 + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) continue; + + //3.清除设备告警 + alarmRecordsService.cancelDeviceAlarm(devCode); + //4.存报警 + //若没绑定井,则不产生报警 + boolean alarmFlag = false; + if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { + //获取报警规则 + List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); + for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { + if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && + Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { + alarmFlag = true; + //写入报警 + //1、判断报警是否已存在 + if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.TubeOther.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); + //7.更新管线状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java index d248540..b33a1ee 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasliquidGasServiceImpl.java @@ -91,7 +91,6 @@ } - public List getBusAlarmLedgerList(String devCode) { return this.dataGasMapper.getListByDevCode(devCode); } @@ -113,6 +112,13 @@ for (int i = 0; i < jsonArray.size(); i++) { try { String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) .findFirst(); @@ -175,18 +181,18 @@ alarmRecordsService.cancelDeviceAlarm(devCode); //4.存报警 //若没绑定井,则不产生报警 - boolean alarmFlag = false; + boolean alarmFlag = false; if (DictEnum.BF_ON.equals(bfcf) && busWellDTOList != null && busWellDTOList.size() > 0) { //获取报警规则 List alarmRuleResponseDTOList = alarmRuleService.getByDevCode(devCode); for (AlarmRuleResponseDTO alarmRuleResponseDTO : alarmRuleResponseDTOList) { if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && Float.valueOf(gas) >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), Float.valueOf(gas))) { - alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); + alarmRecordsService.saveAlarms(devCode, gas, upTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.Methane.getName()); } break; } @@ -197,7 +203,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及设备状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新监测井状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java index e848fce..6297093 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataMonitorPipeOtherServiceImpl.java @@ -84,42 +84,78 @@ } - @Transactional - public void processAlarmData(JSONObject jsonObject, String devCode) { - JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + public void processEventAlarm(String devCode, String eventTypeCode, String logTime, String eventValue) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - //获取报警事件 - List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); - - List busWellDTOList = dataGasMapper.getListByDevCode(devCode); - //若没绑定井,则不产生报警 - if (busWellDTOList != null && busWellDTOList.size() > 0) { - - for (int i = 0; i < jsonArray.size(); i++) { + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + //特殊处理消警 + if ("0".equals(eventValue)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, eventTypeCode); + } + return; } Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> eventTypeCode.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 - if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + if (!alarmDeviceRuleResponseDTO.isPresent()) return; //1.查询是否已存在该类报警 - if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; + if (alarmRecordsService.isDeviceAlarmByCode(devCode, eventTypeCode)) return; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); - - + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + } + } + } + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + String bfcf = busDeviceService.getBfcf(devCode); + if (DictEnum.BF_ON.equals(bfcf)) { + + JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); + //获取报警事件 + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + + List busWellDTOList = dataGasMapper.getListByDevCode(devCode); + //若没绑定井,则不产生报警 + if (busWellDTOList != null && busWellDTOList.size() > 0) { + + for (int i = 0; i < jsonArray.size(); i++) { + try { + String alarmEventCode = jsonArray.get(i).toString(); + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmEventCode)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() + .filter(r -> alarmEventCode.equals(r.getAlarmThreshold())) + .findFirst(); + //系统没有相关报警事件配置,则舍弃 + if (!alarmDeviceRuleResponseDTO.isPresent()) continue; + //1.查询是否已存在该类报警 + if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmEventCode)) continue; + //2.写入新的报警 + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); + + } catch (Exception e) { + e.printStackTrace(); + log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } } } } @@ -169,7 +205,76 @@ .rightVibrateAlarm(VibR) .uptime(CommonUtil.sdf4.parse(CommonUtil.DateFormat(uptime))) .logtime(new Date()) - .build());//存储采集数据 + .build()); + + List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); + ruleResponseDTOList.forEach(ruleResponseDTO -> { + + if ("Sloping".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Sloping)&&(!alarmRecordsService.isWatchAlarms(devCode,"Sloping"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Sloping", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Sloping)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Sloping"); + + } + } + if ("Destroy".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Destroy)&&(!alarmRecordsService.isWatchAlarms(devCode,"Destroy"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Destroy", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Destroy)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Destroy"); + + } + } + if ("Leak".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(Leak)&&(!alarmRecordsService.isWatchAlarms(devCode,"Leak"))) { + alarmRecordsService.saveWatchAlarms(devCode, "Leak", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(Leak)) { + alarmRecordsService.cancelWatchAlarms(devCode, "Leak"); + + } + } + if ("DiscL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscL)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscL"); + + } + } + if ("DiscR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(DiscR)&&(!alarmRecordsService.isWatchAlarms(devCode,"DiscR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "DiscR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(DiscR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "DiscR"); + } + } + + if ("VibL".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibL)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibL"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibL", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibL)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibL"); + } + } + if ("VibR".equals(ruleResponseDTO.getAlarmThreshold())) { + if ("1".equals(VibR)&&(!alarmRecordsService.isWatchAlarms(devCode,"VibR"))) { + alarmRecordsService.saveWatchAlarms(devCode, "VibR", uptime, busWellDTOList, ruleResponseDTO.getAlarmTypeId(), ruleResponseDTO.getAlarmLevelId(), ruleResponseDTO.getAlarmTypeName(), DeviceTypeEnum.MonitorPipeOther.getName()); + } else if ("0".equals(VibR)) { + alarmRecordsService.cancelWatchAlarms(devCode, "VibR"); + } + } + }); + +// //处理报警事件 +// processEventAlarm(devCode,"Sloping",uptime,Sloping); +// processEventAlarm(devCode,"Destroy",uptime,Destroy); +// processEventAlarm(devCode,"Leak",uptime,Leak); +// processEventAlarm(devCode,"DiscL",uptime,DiscL); +// processEventAlarm(devCode,"DiscR",uptime,DiscR); +// processEventAlarm(devCode,"VibL",uptime,VibL); +// processEventAlarm(devCode,"VibR",uptime,VibR); + //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -197,7 +302,7 @@ if (CommonUtil.isNumber(alarmRuleResponseDTO.getAlarmThreshold()) && gas >= Float.valueOf(alarmRuleResponseDTO.getAlarmThreshold())) { - alarmFlag =true; + alarmFlag = true; //写入报警 //1、判断报警是否已存在 if (!alarmRecordsService.isDataAlarmByCode(devCode, alarmRuleResponseDTO.getAlarmLevelId(), gas)) { @@ -213,7 +318,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R,alarmFlag?"燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, CH4L + "," + CH4R, alarmFlag ? "燃气浓度达到".concat(CH4L).concat(",").concat(CH4R).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java index f913775..895d201 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataTubeOtherServiceImpl.java @@ -89,6 +89,7 @@ String bfcf = busDeviceService.getBfcf(devCode); if (DictEnum.BF_ON.equals(bfcf)) { JSONArray jsonArray = jsonObject.getJSONArray("eventType"); + String logTime = jsonObject.getString("logTime"); //获取报警事件 List ruleResponseDTOList = alarmRuleService.getDeviceAlarmRuleByCode(devCode); List busWellDTOList = dataGasMapper.getListByDevCode(devCode); @@ -96,25 +97,43 @@ if (busWellDTOList != null && busWellDTOList.size() > 0) { for (int i = 0; i < jsonArray.size(); i++) { + + String alarmType = ""; try { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - String alarmType = jsonObject1.getString("alarmType"); - String lon = jsonObject1.getString("lon"); - String lat = jsonObject1.getString("lat"); - String uptime = jsonObject1.getString("uptime"); - //保存轨迹 - if (ObjectUtil.isAllNotEmpty(lon, lat)) { - iTrackLogService.saveTrack(devCode, lon, lat, uptime); + Object jsonObject1 = jsonArray.get(i); + if (jsonObject1 instanceof JSONObject) { + JSONObject jsonObject2 = (JSONObject) jsonObject1; + alarmType = jsonObject2.getString("alarmType"); + if (ObjectUtil.isNotEmpty(alarmType)) { + String lon = jsonObject2.getString("lon"); + String lat = jsonObject2.getString("lat"); + //保存轨迹 + if (ObjectUtil.isAllNotEmpty(lon, lat)) { + iTrackLogService.saveTrack(devCode, lon, lat, logTime); + } + } + } else { + alarmType = jsonObject1.toString(); } + //特殊处理消警 + if ("CancelWaterImmersionAlarm".equals(alarmType)) { + if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + } + continue; + } + + final String alarmType1 = alarmType; + Optional alarmDeviceRuleResponseDTO = ruleResponseDTOList.stream() - .filter(r -> alarmType.equals(r.getAlarmThreshold())) + .filter(r -> alarmType1.equals(r.getAlarmThreshold())) .findFirst(); //系统没有相关报警事件配置,则舍弃 if (!alarmDeviceRuleResponseDTO.isPresent()) continue; //1.查询是否已存在该类报警 if (alarmRecordsService.isDeviceAlarmByCode(devCode, alarmType)) continue; //2.写入新的报警 - alarmRecordsService.saveDeviceAlarms(devCode, uptime, busWellDTOList, alarmDeviceRuleResponseDTO); + alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { @@ -141,6 +160,9 @@ String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); String vbat = ((JSONObject) jsonArray.get(i)).getString("vbat"); String batsta = ((JSONObject) jsonArray.get(i)).getString("batsta"); + String sig = ((JSONObject) jsonArray.get(i)).getString("sig"); + String temp = ((JSONObject) jsonArray.get(i)).getString("temp"); + String ssState = ((JSONObject) jsonArray.get(i)).getString("ssState"); gas = String.format("%.2f", Double.valueOf(gas)); //1.存数据 save(DataTubeOther.builder() @@ -156,6 +178,9 @@ .rsrp(rsrp) .sin(pci) .sinr(snr) + .sig(sig) + .temp(temp) + .ssState(ssState) .build());//存储采集数据 //2.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -186,7 +211,7 @@ alarmRecordsService.cancelDataAlarm(devCode); } //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas,alarmFlag?"燃气浓度达到".concat(gas).concat("%LEL"):""); + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", cell, gas, alarmFlag ? "燃气浓度达到".concat(gas).concat("%LEL") : ""); //7.更新管线状态 (1:正常,2:报警) if (busWellDTOList != null && busWellDTOList.size() > 0) { alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java index 98e736b..2288075 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceController.java @@ -216,5 +216,15 @@ public ReturnDTO syncDeviceStatus() { return ReturnUtil.success(iBusDeviceService.syncDeviceStatus()); } + + @ApiOperation("根据闸井id获取设备信息") + @PostMapping("/getListByWellId") + @ResponseBody + public ReturnDTO getListByWellId(@RequestBody IdDTO idDTO) { + Assert.isFalse(ObjectUtil.isEmpty(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iBusDeviceService.getListByWellId(idDTO.getId())); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java index 72a2d84..d6d9743 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerController.java @@ -85,6 +85,7 @@ return ReturnUtil.success(iBusLedgerService.detail(idDTO.getId())); } + /** * 同步三级部门 * diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java index 9e412d2..4316b56 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusLedgerPipeController.java @@ -1,22 +1,33 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.response.ErrorResponseData; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; +import com.casic.missiles.modular.device.dto.BusPositionImportDTO; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.ReturnUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataAccessException; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; /** @@ -40,8 +51,44 @@ @PostMapping("/addPosition") @ResponseBody public ReturnDTO addPosition(@RequestBody BusLedgerPipe busLedgerPipe) { + + List busLedgerPipeList = iBusLedgerPipeService.getListByNumber(busLedgerPipe.getTagNumber()); + if(busLedgerPipeList!=null&&busLedgerPipeList.size()>0){ + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE,"安装位号已存!!!"); + } + Long id =IdUtil.getSnowflake(1,2).nextId(); + busLedgerPipe.setId(id); iBusLedgerPipeService.save(busLedgerPipe); - return ReturnUtil.success(busLedgerPipe.getId()); + return ReturnUtil.success(id); + } + + @ApiOperation("批量导入") + @RequestMapping(value = "/batchImport", method = RequestMethod.POST) + @ResponseBody + public Object batchImport(@RequestParam("file") MultipartFile file) { + List results = new ArrayList<>(); + try { + results = this.importExcel(BusPositionImportDTO.class, file, null, null); + List list = iBusLedgerPipeService.addPositionBatch(results); + if (!CollectionUtil.isEmpty(list)) { + //获取校验报错信息 + return new ErrorResponseData(list.get(0)); + } + } catch (Exception e) { + return catchMybatisPlusException(e, "导入位置信息失败"); + } + return ResponseData.success(); + } + + private ResponseData catchMybatisPlusException(Exception e, String errorMsg) { + if (e instanceof DataAccessException) { + DataAccessException mybatisPlusException = (DataAccessException) e; + String message = mybatisPlusException.getRootCause().getMessage(); + if (message.contains("Duplicate entry '")) { + return new ErrorResponseData("安装位号重复:" + message.replaceAll("Duplicate entry '", "").replaceAll("' for key 'DEVCODE'", "")); + } + } + return new ErrorResponseData(errorMsg); } @ApiOperation("编辑点位") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java index d1e08a8..d938876 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/SyncLogController.java @@ -51,6 +51,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getOperatorName()), "CREATE_USER", request.getOperatorName()); queryWrapper.ge(ObjectUtil.isNotEmpty(request.getStartTime()), "START_TIME", request.getStartTime()); queryWrapper.le(ObjectUtil.isNotEmpty(request.getEndTime()), "END_TIME", request.getEndTime()); + queryWrapper.orderByDesc("START_TIME"); return ReturnUtil.success(super.packForBT(iSyncLogService.page(page, queryWrapper))); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java index 5ee5291..23ddee9 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceMapper.java @@ -73,4 +73,12 @@ " where bd.DEVCODE= #{devcode} and bd.VALID=1 " + ") and ar.ALARM_JUDGE_METHOD=1 order by ALARM_THRESHOLD asc") List getDeviceTypeRule(@Param("devcode") String devcode); + + + @Select("SELECT bd.* from bus_device bd " + + "left JOIN bus_device_ledger bl on bd.id= bl.DEVICE_ID and bl.VALID=1 " + + "LEFT JOIN bus_ledger_all_view bv on bv.id= bl.LEDGER_ID and bv.type= bl.TYPE and bv.VALID=1 " + + "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") + List getListByWellId(@Param("wellId") Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java index e1d16c4..a4c3f7a 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/BusLedgerMapper.java @@ -37,7 +37,7 @@ @Select("SELECT b.ORG_ID,b.ORG_CODE,b.ORG_NAME,b.PARENT_ID FROM `bus_sync_org_relation` b WHERE b.DEL_FLAG =0 and b.PARENT_ID = #{syncId} ") List synDept(@Param("syncId") String syncId); - @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view ") + @Select("SELECT id,tagNumber,deptid,type FROM bus_ledger_all_view where VALID=1") List getBusLedgers(); @Select("SELECT DEVCODE FROM `bus_device` where VALID>0 ") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml index 99ef10b..c6d1fff 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceMapper.xml @@ -29,6 +29,7 @@ bp.DEVICE_MODEL as deviceModel, bt.TYPE_NAME as typeName, + bp.DATA_SERVICE as deviceCategory, bm.`NAME` as manufactureName, bl.tagNumber as tagNumber, bl.id as ledgerId, @@ -81,6 +82,10 @@ and bd.LOGTIME #{request.logTime2} + + and bp.DATA_SERVICE =#{request.deviceCategory} + + ORDER BY bd.INSTALL_DATE DESC diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml index bdadb6a..d3f4684 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusLedgerPipeMapper.xml @@ -40,7 +40,7 @@ `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + AND bdl.VALID = 1 JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -99,8 +99,8 @@ bm.`NAME` as manufactureName FROM `bus_ledger_pipe` blp LEFT JOIN bus_pipeline bp ON blp.PIPE_CODE = bp.PIPE_CODE - LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID - AND bdl.TYPE = 3 + LEFT JOIN bus_device_ledger bdl ON bdl.LEDGER_ID = blp.ID and bdl.type=blp.type + AND bdl.VALID = 1 LEFT JOIN bus_device bd ON bd.ID = bdl.DEVICE_ID AND bd.VALID = 1 @@ -117,7 +117,9 @@ WITH station_temp as(SELECT bl.ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID FROM `bus_ledger` bl where bl.VALID=1 and bl.TYPE =2) - select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME from station_temp bl + select bl.ID as LEDGER_ID,bl.LEDGER_CODE,bl.TAG_NUMBER,bl.LEDGER_NAME,bl.DEPTID,bd.ID as DEVICE_ID,bd.DEVICE_NAME,bd.DEVCODE from station_temp bl left join bus_device_ledger bdl on bdl.LEDGER_ID = bl.ID and bdl.TYPE =2 and bdl.valid=1 left join bus_device bd on bd.id= bdl.DEVICE_ID and bd.VALID=1 order by bl.ID diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml index 7b92b04..1d97c64 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dao/mapping/EqEquipRqMapper.xml @@ -184,7 +184,7 @@ WHERE EQ_LOCNO like 'N%' and - EQ_CATEGORY in (1,3) + EQ_CATEGORY in (1,2,3,5) diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java index 859cf08..143b42d 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusConfigOtherDTO.java @@ -23,6 +23,9 @@ @ApiModelProperty("设备类型id") private Long typeId; + @ApiModelProperty("产品名称") + private String productName; + @ApiModelProperty("指令集合") private List commandConfigList; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java index 646610b..2cb5894 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceDTO.java @@ -45,4 +45,7 @@ @ApiModelProperty("最新上传结束时间") private String logTime2; + + @ApiModelProperty("设备类别(0:自有设备,1:数据服务)") + private String deviceCategory; } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java index 8c95537..28b30fa 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusDeviceImportDTO.java @@ -44,6 +44,9 @@ @ExcelProperty("关联管线") private String pipeCode; + @ExcelProperty("监测类型") + private String monitorType; + private String watchObject; private Long deviceType; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java index 0980c34..ac5daf0 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusLedgerPipeRequestDTO.java @@ -24,4 +24,7 @@ @ApiModelProperty("详细位置") private String position; + @ApiModelProperty("1:其他,3:管线") + private String type; + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java new file mode 100644 index 0000000..bce7ebd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/BusPositionImportDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.device.dto; + + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class BusPositionImportDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + + @ExcelProperty("管线编号") + private String pipeCode; + + @ExcelProperty("安装位号") + private String tagNumber; + + @ExcelProperty("经度(高德)") + private String lngGaode; + + @ExcelProperty("纬度(高德)") + private String latGaode; + + @ExcelProperty("详细位置") + private String position; + + @ExcelProperty("管理单位") + private Long deptid; + + @ExcelProperty("位置类别") + private String type; + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java index 58faa0e..d72ae78 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/dto/PtzXtControlDTO.java @@ -16,13 +16,13 @@ private String deviceId; //移动命令:left right up down left_up left_down right_up right_down GOTO_PRESET - @ApiModelProperty("移动命令") + @ApiModelProperty("移动命令(left right up down left_up left_down right_up right_down)") private String command; - @ApiModelProperty("速度") + @ApiModelProperty("速度,一般传100") private String speed; - @ApiModelProperty("启停命令") + @ApiModelProperty("启停命令(0:开始,1:结束)") private String cameraAction; @ApiModelProperty("预置点编号") diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java index b4ec73c..5a3d0b0 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BaseProduct.java @@ -66,7 +66,7 @@ private String powerSupplyMode; - @ApiModelProperty("是否结束数据服务") + @ApiModelProperty("是否结束数据服务(1:是,0:否)") @TableField("DATA_SERVICE") private String dataService; diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java index 1184995..407e3c1 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusDevice.java @@ -193,10 +193,14 @@ @TableField(exist = false) private String bfztName; + @ApiModelProperty("设备类别(0:自有设备,1:数据服务)") + @TableField(exist = false) + private String deviceCategory; + public BusDevice() { } - public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds) { + public BusDevice(String devcode, Long deviceType, Long productId, String valid, Date installDate, String watchObject, List ledgerIds, String monitorType) { this.devcode = devcode; this.deviceType = deviceType; this.productId = productId; @@ -204,6 +208,7 @@ this.installDate = installDate; this.watchObject = watchObject; this.ledgerIds = ledgerIds; + this.monitorType = monitorType; } public static List convertDeviceList(List dtoList) { @@ -227,7 +232,8 @@ deviceImportDTO.getValid(), deviceImportDTO.getInstallDate(), deviceImportDTO.getWatchObject(), - deviceImportDTO.getLedgerIds())); + deviceImportDTO.getLedgerIds(), + deviceImportDTO.getMonitorType())); }); return busDeviceList; } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java index 12b52de..1ac8455 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/entity/BusLedgerPipe.java @@ -1,16 +1,20 @@ package com.casic.missiles.modular.device.entity; +import cn.hutool.core.util.IdUtil; 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 com.casic.missiles.modular.device.dto.BusPositionImportDTO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import java.io.Serializable; +import java.util.ArrayList; import java.util.Date; +import java.util.List; /** *

@@ -29,7 +33,7 @@ private static final long serialVersionUID = 1L; @ApiModelProperty("主键") - @TableId(value = "ID", type = IdType.AUTO) +// @TableId(value = "ID", type = IdType.AUTO) private Long id; @ApiModelProperty("编号") @@ -60,6 +64,10 @@ @TableField("DEPTID") private Long deptid; + @ApiModelProperty("类别(1:其他,3:管线)") + @TableField("`TYPE`") + private String type; + @ApiModelProperty("责任部门") @TableField("RESPONSIBLE_DEPT") private Long responsibleDept; @@ -110,9 +118,10 @@ public BusLedgerPipe() { } - public BusLedgerPipe(String pipeCode, String ledgerName, String tagNumber, + public BusLedgerPipe(Long id,String pipeCode, String ledgerName, String tagNumber, String lngGaode, String latGaode, String position, - Long deptid, String devcode) { + Long deptid, String devcode, String type) { + this.id=id; this.pipeCode = pipeCode; this.ledgerName = ledgerName; this.tagNumber = tagNumber; @@ -121,5 +130,26 @@ this.position = position; this.deptid = deptid; this.devcode = devcode; + this.type = type; } + + public static List convertDeviceList(List dtoList) { + + + List busDeviceList = new ArrayList<>(); + dtoList.forEach(positionImportDTO -> { + + busDeviceList.add(new BusLedgerPipe(IdUtil.getSnowflake(1,2).nextId(),positionImportDTO.getPipeCode(), + positionImportDTO.getTagNumber(), + positionImportDTO.getTagNumber(), + positionImportDTO.getLngGaode(), + positionImportDTO.getLatGaode(), + positionImportDTO.getPosition(), + positionImportDTO.getDeptid(), + "", + positionImportDTO.getType())); + }); + return busDeviceList; + } + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java index aaaa409..63c0576 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceService.java @@ -52,4 +52,8 @@ List getDeviceRule(String devcode); + List getDevicesByCodes(List devcodes); + + List getListByWellId(Long wellId); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java index 14f6a93..8692383 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/IBusLedgerPipeService.java @@ -2,11 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; -import com.casic.missiles.core.datascope.DataScope; -import com.casic.missiles.modular.device.dto.BusLedgerPipeMonitorRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeResponseDTO; -import com.casic.missiles.modular.device.dto.MonitorDataRequestDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import java.util.List; @@ -26,17 +22,21 @@ Page monitorPipePageList(Page page, BusLedgerPipeMonitorRequestDTO request); - BusLedgerPipeResponseDTO detail(Long id,String devcode); + BusLedgerPipeResponseDTO detail(Long id, String devcode); - List> watchDataByPipe(MonitorDataRequestDTO requestDTO); + List> watchDataByPipe(MonitorDataRequestDTO requestDTO); - List> pipeList(); + List> pipeList(); - List> deviceList(); + List> deviceList(); BusLedgerPipe saveBusLedgerPipe(BusLedgerPipe busLedgerPipe); Boolean updateMonitorStatus(List tagNumbers); + List addPositionBatch(List results); + + List getListByNumber(String tagNumber); + } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java index 66ed812..ad72230 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusConfigServiceImpl.java @@ -12,9 +12,12 @@ import com.casic.missiles.modular.device.dto.BusConfigOtherDTO; import com.casic.missiles.modular.device.dto.BusConfigRequestDTO; import com.casic.missiles.modular.device.entity.BusConfig; +import com.casic.missiles.modular.device.entity.BusDevice; import com.casic.missiles.modular.device.service.IBusConfigService; +import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.HttpClientUtils; import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -22,6 +25,9 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.LinkedBlockingDeque; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; /** *

@@ -36,6 +42,11 @@ public class BusConfigServiceImpl extends ServiceImpl implements IBusConfigService { private final AbstractPermissionContext abstractPermissionContext; + private final IBusDeviceService iBusDeviceService; + private final ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(3, 6, 60, TimeUnit.SECONDS, new LinkedBlockingDeque<>(10)); + + @Value("${casic.brSendConfigUrl}") + private String brSendConfigUrl; @Transactional @Override @@ -105,6 +116,42 @@ .operator(user != null ? user.getId() : null) .operatorName(user != null ? user.getName() : "").build()); }); + + + threadPoolExecutor.execute( + () -> { + //发送第三方下发: + if (busConfigOtherDTO.getProductName().contains("管网哨兵")) { + List busDeviceList = iBusDeviceService.getDevicesByCodes(devcodes); + for (BusDevice busDevice : busDeviceList) { + if (ObjectUtil.isAllNotEmpty(busDevice.getNbProductId(), busDevice.getNbDeviceId())) { + Map commandMap = new HashMap<>(); + commandMap.put("productId", busDevice.getNbProductId()); + commandMap.put("devCode", busDevice.getDevcode()); + commandMap.put("deviceId", busDevice.getNbDeviceId()); + commandMap.put("cmdList", busConfigOtherDTO.getCommandConfigList()); + HttpClientUtils.post(brSendConfigUrl+"/tube/config/send", JSON.toJSONString(commandMap)); + } + } + } else if (busConfigOtherDTO.getProductName().contains("智能警示桩")) { + + List busDeviceList = iBusDeviceService.getDevicesByCodes(devcodes); + for (BusDevice busDevice : busDeviceList) { + if (ObjectUtil.isAllNotEmpty(busDevice.getNbProductId(), busDevice.getNbDeviceId())) { + Map commandMap = new HashMap<>(); + commandMap.put("productId", busDevice.getNbProductId()); + commandMap.put("devCode", busDevice.getDevcode()); + commandMap.put("deviceId", busDevice.getNbDeviceId()); + commandMap.put("cmdList", busConfigOtherDTO.getCommandConfigList()); + HttpClientUtils.post(brSendConfigUrl+"/sentinel/config/send", JSON.toJSONString(commandMap)); + } + } + + } + } + ); + + return this.saveBatch(busConfigs); // List> mapList = new ArrayList<>(); // Map commandMap = new HashMap<>(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java index 60d15e5..bae6902 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceServiceImpl.java @@ -3,6 +3,7 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -80,6 +81,7 @@ @Override public Page listPage(Page page, BusDeviceDTO request) { + page.setOptimizeCountSql(false); Page busDevicePage = this.baseMapper.pageList(page, request, commonServer.getDeptScopeIds(request.getDeptId())); List busDeviceList = busDevicePage.getRecords(); busDeviceList.forEach(busDevice -> { @@ -227,7 +229,7 @@ if (deviceDataEnum.getTableColumns().contains("cell")) { String[] queryColumns = deviceDataEnum.getQueryColumns().split(",", 4); resultMap = this.baseMapper.cellAnalysis(deviceDataEnum.getTableName(), - "cell,uptime", + deviceDataEnum.getCellColumn(), queryColumns[0], queryColumns[1], deviceDataEnum.getOrderColumn(), @@ -265,14 +267,13 @@ } else { List busDeviceLedgers = busDeviceLedgerService.getListByDeviceId(busDevice.getId()); //没绑定关系,先绑定 - if (ObjectUtil.isNotEmpty(busDeviceLedgers)) { + if (busDeviceLedgers == null || busDeviceLedgers.size() < 1) { busDeviceLedgerService.saveDeviceLedger(busDevice.getId(), busDevice.getLedgerIds(), busDevice.getWatchObject()); } else { //已绑定,判断是否位置变了 List ledgerIdsPre = busDeviceLedgers.stream().map(BusDeviceLedger::getLedgerId).collect(Collectors.toList()); if (ledgerIds.containsAll(ledgerIdsPre) && ledgerIdsPre.containsAll(ledgerIds)) { } else { - busDeviceLedgerService.deleteDeviceLedgers(Arrays.asList(busDevice.getId())); busDeviceLedgerService.saveDeviceLedger(busDevice.getId(), busDevice.getLedgerIds(), busDevice.getWatchObject()); } } @@ -304,6 +305,8 @@ List codeList = iBusLedgerService.getCodeLists(); //获取管线编号 List pipeCodeList = iBusLedgerService.getPipeCodeList(); + List pipeList = new ArrayList<>(); + final Integer[] index = {1}; results.forEach(deviceImportDTO -> { index[0]++; @@ -357,22 +360,16 @@ return; } //新增点位 - if ("3".equals(deviceImportDTO.getWatchObject())) { + if ("3".equals(deviceImportDTO.getWatchObject()) || "1".equals(deviceImportDTO.getWatchObject())) { //toDo:安装位号一致,入一次即可 //为管线 - BusLedgerPipe busLedgerPipe = new BusLedgerPipe(deviceImportDTO.getPipeCode(), deviceImportDTO.getTagNumber(), + Long pipeLedgerId = IdUtil.getSnowflake(1, 2).nextId(); + BusLedgerPipe busLedgerPipe = new BusLedgerPipe(pipeLedgerId, deviceImportDTO.getPipeCode(), deviceImportDTO.getTagNumber(), deviceImportDTO.getTagNumber(), deviceImportDTO.getLng(), deviceImportDTO.getLat(), - deviceImportDTO.getPosition(), deviceImportDTO.getDeptid(), deviceImportDTO.getDevCode()); - busLedgerPipe = iBusLedgerPipeService.saveBusLedgerPipe(busLedgerPipe); - deviceImportDTO.setLedgerIds(Arrays.asList(busLedgerPipe.getId())); - }else if("1".equals(deviceImportDTO.getWatchObject())){ - //新增闸井 - BusLedger busLedger = new BusLedger(deviceImportDTO.getTagNumber(), - deviceImportDTO.getTagNumber(),deviceImportDTO.getTagNumber(), - deviceImportDTO.getLng(),deviceImportDTO.getLat(),deviceImportDTO.getPosition(), - deviceImportDTO.getDeptid()); - this.iBusLedgerService.save(busLedger); - deviceImportDTO.setLedgerIds(Arrays.asList(busLedger.getId())); + deviceImportDTO.getPosition(), deviceImportDTO.getDeptid(), deviceImportDTO.getDevCode(), deviceImportDTO.getWatchObject()); +// busLedgerPipe = iBusLedgerPipeService.saveBusLedgerPipe(busLedgerPipe); + pipeList.add(busLedgerPipe); + deviceImportDTO.setLedgerIds(Arrays.asList(pipeLedgerId)); } } @@ -383,6 +380,10 @@ return list; } + if (pipeList != null && pipeList.size() > 0) { + iBusLedgerPipeService.saveBatch(pipeList); + } + List busDeviceList = BusDevice.convertDeviceList(results); //保存设备信息 @@ -514,7 +515,7 @@ } -// @Cacheable(value = "alarmRuleCache", key = "#devcode") + // @Cacheable(value = "alarmRuleCache", key = "#devcode") @Override public List getDeviceRule(String devcode) { List alarmRuleValueList = this.baseMapper.getSpecialDeviceRule(devcode); @@ -523,4 +524,18 @@ } return alarmRuleValueList; } + + + @Override + public List getDevicesByCodes(List devcodes) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("DEVCODE", devcodes); + queryWrapper.eq("VALID", "1"); + return this.baseMapper.selectList(queryWrapper); + } + + @Override + public List getListByWellId(Long wellId) { + return this.baseMapper.getListByWellId(wellId); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java index 5073159..7f8bfdc 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/BusLedgerPipeServiceImpl.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service.impl; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -12,11 +13,8 @@ import com.casic.missiles.enums.DeviceDataEnum; import com.casic.missiles.modular.device.dao.BusDeviceMapper; import com.casic.missiles.modular.device.dao.BusLedgerPipeMapper; -import com.casic.missiles.modular.device.dto.BusLedgerPipeMonitorRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeRequestDTO; -import com.casic.missiles.modular.device.dto.BusLedgerPipeResponseDTO; -import com.casic.missiles.modular.device.dto.MonitorDataRequestDTO; -import com.casic.missiles.modular.device.entity.BusLedgerPipe; +import com.casic.missiles.modular.device.dto.*; +import com.casic.missiles.modular.device.entity.*; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.server.CommonServer; @@ -24,11 +22,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.stream.Collectors; /** *

@@ -63,6 +60,7 @@ queryWrapper.like(ObjectUtil.isNotEmpty(request.getPipeCode()), "PIPE_CODE", request.getPipeCode()); queryWrapper.like(ObjectUtil.isNotEmpty(request.getPosition()), "POSITION", request.getPosition()); queryWrapper.in(ObjectUtil.isNotEmpty(deptIds), "DEPTID", deptIds); + queryWrapper.eq(ObjectUtil.isNotEmpty(request.getType()), "TYPE", request.getType()); Page pipePage = this.page(page, queryWrapper); List pipeList = pipePage.getRecords(); pipeList.forEach(pipe -> { @@ -156,6 +154,12 @@ return busLedgerPipe; } + public List getList() { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("VALID", "1"); + return this.baseMapper.selectList(queryWrapper); + } + @Override public Boolean updateMonitorStatus(List tagNumbers) { UpdateWrapper updateWrapper = new UpdateWrapper<>(); @@ -163,4 +167,43 @@ updateWrapper.set("MONITOR_STATE", "3"); return this.update(updateWrapper); } + + @Transactional + @Override + public List addPositionBatch(List results) { + List list = new ArrayList<>(); + if (!CollectionUtil.isEmpty(results)) { + List busLedgerPipeList = this.getList(); + List tagCodes = busLedgerPipeList.stream().map(BusLedgerPipe::getTagNumber).collect(Collectors.toList()); + final Integer[] index = {1}; + results.forEach(busPositionImportDTO -> { + index[0]++; + //设备编号查重 + if (tagCodes.contains(busPositionImportDTO.getTagNumber())) { + list.add("第" + index[0] + "行,安装位号已存在!"); + return; + } + + }); + if (CollectionUtil.isNotEmpty(list)) { + return list; + } + List busDeviceList = BusLedgerPipe.convertDeviceList(results); + + //保存点位信息 + this.saveBatch(busDeviceList); + + } else { + list.add("导入数据不能为空"); + } + return list; + } + + @Override + public List getListByNumber(String tagNumber) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("VALID", "1"); + queryWrapper.eq("TAG_NUMBER", tagNumber); + return this.baseMapper.selectList(queryWrapper); + } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java index 5798675..ec2b3f5 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/service/impl/SyncLogServiceImpl.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.modular.device.dao.SyncLogMapper; import com.casic.missiles.modular.device.entity.SyncLog; import com.casic.missiles.modular.device.service.ISyncLogDetailService; @@ -39,7 +40,8 @@ syncLog.setUpdateCount(updateCount); syncLog.setAddCount(addCount); syncLog.setDeleteCount(deleteCount); - syncLog.setCreateUser(permissionContext.getAuthService().getLoginUser().getName()); + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + syncLog.setCreateUser(null == authUser ? "admin" : authUser.getName()); return this.baseMapper.insert(syncLog) > 0 ? true : false; } diff --git a/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java b/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java index b80c202..6be2b47 100644 --- a/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java +++ b/casic-job/src/main/java/com/casic/missiles/job/config/XxlJobConfig.java @@ -1,56 +1,56 @@ -package com.casic.missiles.job.config; - -import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - - -@Slf4j -@Configuration -@Data -@ConditionalOnExpression("T(org.apache.commons.lang3.StringUtils).isNotEmpty('${xxl.job.admin.addresses}')") -public class XxlJobConfig { - @Value("${xxl.job.admin.addresses}") - private String adminAddresses; - - @Value("${xxl.job.accessToken}") - private String accessToken; - - @Value("${xxl.job.executor.appname}") - private String appname; - -// @Value("${xxl.job.executor.address}") -// private String address; - - @Value("${xxl.job.executor.ip}") - private String ip; - - @Value("${xxl.job.executor.port}") - private int port; - - @Value("${xxl.job.executor.logpath}") - private String logPath; - - @Value("${xxl.job.executor.logretentiondays}") - private int logRetentionDays; - - @Bean - public XxlJobSpringExecutor xxlJobExecutor() { - log.info(">>>>>>>>>>> xxl-job config init."); - XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); - xxlJobSpringExecutor.setAdminAddresses(adminAddresses); - xxlJobSpringExecutor.setAppname(appname); -// xxlJobSpringExecutor.setAddress(address); - xxlJobSpringExecutor.setIp(ip); - xxlJobSpringExecutor.setPort(port); - xxlJobSpringExecutor.setAccessToken(accessToken); - xxlJobSpringExecutor.setLogPath(logPath); - xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); - - return xxlJobSpringExecutor; - } -} +//package com.casic.missiles.job.config; +// +//import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +//import lombok.Data; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.beans.factory.annotation.Value; +//import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; +//import org.springframework.context.annotation.Bean; +//import org.springframework.context.annotation.Configuration; +// +// +//@Slf4j +//@Configuration +//@Data +//@ConditionalOnExpression("T(org.apache.commons.lang3.StringUtils).isNotEmpty('${xxl.job.admin.addresses}')") +//public class XxlJobConfig { +// @Value("${xxl.job.admin.addresses}") +// private String adminAddresses; +// +// @Value("${xxl.job.accessToken}") +// private String accessToken; +// +// @Value("${xxl.job.executor.appname}") +// private String appname; +// +//// @Value("${xxl.job.executor.address}") +//// private String address; +// +// @Value("${xxl.job.executor.ip}") +// private String ip; +// +// @Value("${xxl.job.executor.port}") +// private int port; +// +// @Value("${xxl.job.executor.logpath}") +// private String logPath; +// +// @Value("${xxl.job.executor.logretentiondays}") +// private int logRetentionDays; +// +// @Bean +// public XxlJobSpringExecutor xxlJobExecutor() { +// log.info(">>>>>>>>>>> xxl-job config init."); +// XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); +// xxlJobSpringExecutor.setAdminAddresses(adminAddresses); +// xxlJobSpringExecutor.setAppname(appname); +//// xxlJobSpringExecutor.setAddress(address); +// xxlJobSpringExecutor.setIp(ip); +// xxlJobSpringExecutor.setPort(port); +// xxlJobSpringExecutor.setAccessToken(accessToken); +// xxlJobSpringExecutor.setLogPath(logPath); +// xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); +// +// return xxlJobSpringExecutor; +// } +//} diff --git a/casic-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java b/casic-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java index 798424c..3785003 100644 --- a/casic-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java +++ b/casic-job/src/main/java/com/casic/missiles/job/handler/DemoJobHandler.java @@ -1,37 +1,37 @@ -package com.casic.missiles.job.handler; - - -import com.xxl.job.core.biz.model.ReturnT; -import com.xxl.job.core.context.XxlJobHelper; -import com.xxl.job.core.handler.annotation.XxlJob; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; - -/** - * XxlJob开发示例(Bean模式) - * - * 开发步骤: - * 1、任务开发:在Spring Bean实例中,开发Job方法; - * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 - * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; - * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; - */ -@Slf4j -@Component -public class DemoJobHandler { - - @XxlJob(value = "demoHandler") - public ReturnT execute(String param) throws Exception { - System.out.println("调度任务Demo执行"); - XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); - -// for (int i = 0; i < 5; i++) { -// XxlJobLogger.log("beat at:" + i); -// TimeUnit.SECONDS.sleep(2); -// } - return SUCCESS; - } - -} +//package com.casic.missiles.job.handler; +// +// +//import com.xxl.job.core.biz.model.ReturnT; +//import com.xxl.job.core.context.XxlJobHelper; +//import com.xxl.job.core.handler.annotation.XxlJob; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.stereotype.Component; +// +//import static com.xxl.job.core.biz.model.ReturnT.SUCCESS; +// +///** +// * XxlJob开发示例(Bean模式) +// * +// * 开发步骤: +// * 1、任务开发:在Spring Bean实例中,开发Job方法; +// * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 +// * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; +// * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; +// */ +//@Slf4j +//@Component +//public class DemoJobHandler { +// +// @XxlJob(value = "demoHandler") +// public ReturnT execute(String param) throws Exception { +// System.out.println("调度任务Demo执行"); +// XxlJobHelper.log("XXL-JOB-DEMO, Hello World."); +// +//// for (int i = 0; i < 5; i++) { +//// XxlJobLogger.log("beat at:" + i); +//// TimeUnit.SECONDS.sleep(2); +//// } +// return SUCCESS; +// } +// +//} diff --git a/casic-job/src/main/java/com/casic/missiles/job/handler/OfflineJobHandler.java b/casic-job/src/main/java/com/casic/missiles/job/handler/OfflineJobHandler.java index 1e6708f..276c5db 100644 --- a/casic-job/src/main/java/com/casic/missiles/job/handler/OfflineJobHandler.java +++ b/casic-job/src/main/java/com/casic/missiles/job/handler/OfflineJobHandler.java @@ -1,26 +1,26 @@ -package com.casic.missiles.job.handler; - -import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; -import com.xxl.job.core.context.XxlJobHelper; -import com.xxl.job.core.handler.annotation.XxlJob; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -@RequiredArgsConstructor -public class OfflineJobHandler { - - private final IAlarmRecordsService iAlarmRecordsService; - - /** - * 离线判断处理 - */ - @XxlJob("offlineJobHandler") - public void offlineJobHandler() { - XxlJobHelper.log("check offline"); - iAlarmRecordsService.processOffline(); - } - -} +//package com.casic.missiles.job.handler; +// +//import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +//import com.xxl.job.core.context.XxlJobHelper; +//import com.xxl.job.core.handler.annotation.XxlJob; +//import lombok.RequiredArgsConstructor; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.stereotype.Component; +// +//@Slf4j +//@Component +//@RequiredArgsConstructor +//public class OfflineJobHandler { +// +// private final IAlarmRecordsService iAlarmRecordsService; +// +// /** +// * 离线判断处理 +// */ +// @XxlJob("offlineJobHandler") +// public void offlineJobHandler() { +// XxlJobHelper.log("check offline"); +// iAlarmRecordsService.processOffline(); +// } +// +//} diff --git a/casic-job/src/main/java/com/casic/missiles/job/handler/SuspendExpireJobHandler.java b/casic-job/src/main/java/com/casic/missiles/job/handler/SuspendExpireJobHandler.java index 5ce8fc2..3610add 100644 --- a/casic-job/src/main/java/com/casic/missiles/job/handler/SuspendExpireJobHandler.java +++ b/casic-job/src/main/java/com/casic/missiles/job/handler/SuspendExpireJobHandler.java @@ -1,65 +1,65 @@ -package com.casic.missiles.job.handler; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.casic.missiles.modular.alarm.entity.AlarmRecords; -import com.casic.missiles.modular.alarm.entity.SuspendLog; -import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; -import com.casic.missiles.modular.alarm.service.IApprovalLogService; -import com.casic.missiles.modular.alarm.service.ISuspendLogService; -import com.xxl.job.core.context.XxlJobHelper; -import com.xxl.job.core.handler.annotation.XxlJob; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.time.LocalDate; -import java.time.ZoneId; -import java.time.ZonedDateTime; -import java.util.Date; -import java.util.List; -import java.util.stream.Collectors; - -@Slf4j -@Component -@RequiredArgsConstructor -public class SuspendExpireJobHandler { - - private final ISuspendLogService iSuspendLogService; - private final IAlarmRecordsService iAlarmRecordsService; - private final IApprovalLogService iApprovalLogService; - - /** - * 挂起时间到期处理 - */ - @XxlJob("suspendExpireJobHandler") - public void suspendExpireJobHandler() { - XxlJobHelper.log("check suspend expire"); -// Date today = getTodayStart(); - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.lt("EXPIRE_TIME", new Date()); - queryWrapper.eq("VALID", "1"); - List suspendLogList = iSuspendLogService.list(queryWrapper); - if (suspendLogList != null && suspendLogList.size() > 0) { - suspendLogList.forEach(suspendLog -> { - suspendLog.setValid("0"); - }); - iSuspendLogService.updateBatchById(suspendLogList); - //更新最新状态 - List alarmIds = suspendLogList.stream().map(SuspendLog::getAlarmId).collect(Collectors.toList()); - List alarmRecordsList = iAlarmRecordsService.changeProcessStatus(alarmIds); - //添加流转日志 - iApprovalLogService.saveSuspendLogs(alarmRecordsList); - } - } - - private Date getTodayStart() { - // 获取当天日期 - LocalDate today = LocalDate.now(); - // 当天日期与午夜时间的组合 - ZonedDateTime todayStart = today.atStartOfDay(ZoneId.systemDefault()); - - // 转换为java.util.Date - return Date.from(todayStart.toInstant()); - } - -} +//package com.casic.missiles.job.handler; +// +//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +//import com.casic.missiles.modular.alarm.entity.AlarmRecords; +//import com.casic.missiles.modular.alarm.entity.SuspendLog; +//import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +//import com.casic.missiles.modular.alarm.service.IApprovalLogService; +//import com.casic.missiles.modular.alarm.service.ISuspendLogService; +//import com.xxl.job.core.context.XxlJobHelper; +//import com.xxl.job.core.handler.annotation.XxlJob; +//import lombok.RequiredArgsConstructor; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.stereotype.Component; +// +//import java.time.LocalDate; +//import java.time.ZoneId; +//import java.time.ZonedDateTime; +//import java.util.Date; +//import java.util.List; +//import java.util.stream.Collectors; +// +//@Slf4j +//@Component +//@RequiredArgsConstructor +//public class SuspendExpireJobHandler { +// +// private final ISuspendLogService iSuspendLogService; +// private final IAlarmRecordsService iAlarmRecordsService; +// private final IApprovalLogService iApprovalLogService; +// +// /** +// * 挂起时间到期处理 +// */ +// @XxlJob("suspendExpireJobHandler") +// public void suspendExpireJobHandler() { +// XxlJobHelper.log("check suspend expire"); +//// Date today = getTodayStart(); +// QueryWrapper queryWrapper = new QueryWrapper<>(); +// queryWrapper.lt("EXPIRE_TIME", new Date()); +// queryWrapper.eq("VALID", "1"); +// List suspendLogList = iSuspendLogService.list(queryWrapper); +// if (suspendLogList != null && suspendLogList.size() > 0) { +// suspendLogList.forEach(suspendLog -> { +// suspendLog.setValid("0"); +// }); +// iSuspendLogService.updateBatchById(suspendLogList); +// //更新最新状态 +// List alarmIds = suspendLogList.stream().map(SuspendLog::getAlarmId).collect(Collectors.toList()); +// List alarmRecordsList = iAlarmRecordsService.changeProcessStatus(alarmIds); +// //添加流转日志 +// iApprovalLogService.saveSuspendLogs(alarmRecordsList); +// } +// } +// +// private Date getTodayStart() { +// // 获取当天日期 +// LocalDate today = LocalDate.now(); +// // 当天日期与午夜时间的组合 +// ZonedDateTime todayStart = today.atStartOfDay(ZoneId.systemDefault()); +// +// // 转换为java.util.Date +// return Date.from(todayStart.toInstant()); +// } +// +//} diff --git a/casic-public/src/main/java/com/casic/missiles/enums/AlarmEnum.java b/casic-public/src/main/java/com/casic/missiles/enums/AlarmEnum.java new file mode 100644 index 0000000..e73e469 --- /dev/null +++ b/casic-public/src/main/java/com/casic/missiles/enums/AlarmEnum.java @@ -0,0 +1,46 @@ +package com.casic.missiles.enums; + + +public enum AlarmEnum { + + + Sloping("Sloping", "倾斜报警"), + Destroy("Destroy", "破坏报警"), + DiscL("DiscL", "左侧断线报警"), + Leak("Leak", "泄露报警"), + DiscR("DiscR", "右侧断线报警"), + VibL("VibL", "左侧振动报警"), + VibR("VibR", "右侧振动报警"); +// VibL("自管", "1"), +// VibL("自管", "1"), +// VibL("自管", "1"); + + private String code; + private String value; + + AlarmEnum(String code, String value) { + this.code = code; + this.value = value; + } + + + public static String getValue(String code){ + for(AlarmEnum approvalStatusEnum :values()){ + if(approvalStatusEnum.code.equals(code)){ + return approvalStatusEnum.value; + } + } + return ""; + } + + + + public String getCode() { + return code; + } + + public String getValue() { + return value; + } + +} diff --git a/casic-public/src/main/java/com/casic/missiles/enums/DeviceDataEnum.java b/casic-public/src/main/java/com/casic/missiles/enums/DeviceDataEnum.java index 3fc6f08..13f5b23 100644 --- a/casic-public/src/main/java/com/casic/missiles/enums/DeviceDataEnum.java +++ b/casic-public/src/main/java/com/casic/missiles/enums/DeviceDataEnum.java @@ -4,11 +4,12 @@ public enum DeviceDataEnum { - DATA_GAS("燃气智能监测终端", "data_gas", "devcode,uptime,logtime,well_code", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime"), - DATA_GAS_LIQUID("燃气智能监测终端(一体化)", "data_gasliquid_gas", "devcode,uptime,logtime,well_code", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime"), - DATA_TUBE_OTHER("管网哨兵", "data_tube_other", "devcode,uptime,logtime,well_code", "DEVCODE,GASVAL, VBAT,SIN,RSRP,SINR,UPTIME,LOGTIME", "logtime"), - DATA_MONITOR_PIPE_OTHER("智能警示桩", "data_monitor_pipe_other", "devcode,uptime,logtime,well_number", "DEVCODE,TEMPERATURE,HUMIDITY,VBAT,PIPE_INCLINE_ALARM,PIPE_BREAK_ALARM,GAS_ALARM,LEFT_OFF_LINE_ALARM,LEFT_VIBRATE_ALARM,RIGHT_OFF_LINE_ALARM,RIGHT_VIBRATE_ALARM,PICTURE_ALARM,LEFT_GAS,RIGHT_GAS,LEFT_LENGTH,RIGHT_LENGTH,LOGTIME,UPTIME ", "logtime"), - DATA_PAN_GAS("场站监测云台", "data_pan_gas", "DEVICE_CODE,,logtime,LEDGER_CODE", "ID,LEDGER_NUMBER,DEVICE_CODE,CONCENTRATION,LOGTIME,DIRCETION,PITCH", "LOGTIME"); + DATA_GAS("燃气智能监测终端", "data_gas", "devcode,uptime,logtime,well_code", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime","cell,uptime"), + DATA_GAS_LIQUID("燃气智能监测终端(一体化)", "data_gasliquid_gas", "devcode,uptime,logtime,well_code", "id,well_code,devcode,cell,strength,descn,uptime,logtime,pci,rsrp,snr", "logtime","cell,uptime"), + DATA_TUBE_OTHER("管网哨兵", "data_tube_other", "devcode,uptime,logtime,well_code", "DEVCODE,GASVAL, VBAT,SIN,RSRP,SINR,UPTIME,LOGTIME,sig,temp,SS_STATE as ssState", "logtime","VBAT,UPTIME"), + DATA_MONITOR_PIPE_OTHER("智能警示桩", "data_monitor_pipe_other", "devcode,uptime,logtime,well_number", "DEVCODE,TEMPERATURE,HUMIDITY,VBAT,PIPE_INCLINE_ALARM,PIPE_BREAK_ALARM,GAS_ALARM,LEFT_OFF_LINE_ALARM,LEFT_VIBRATE_ALARM,RIGHT_OFF_LINE_ALARM,RIGHT_VIBRATE_ALARM,PICTURE_ALARM,LEFT_GAS,RIGHT_GAS,LEFT_LENGTH,RIGHT_LENGTH,LOGTIME,UPTIME ", "logtime","VBAT as cell,uptime"), + DATA_PAN_GAS("场站监测云台", "data_pan_gas", "DEVICE_CODE,,logtime,LEDGER_CODE", "ID,LEDGER_NUMBER,DEVICE_CODE,CONCENTRATION,LOGTIME,DIRCETION,PITCH", "LOGTIME","CONCENTRATION as cell ,LOGTIME as uptime"), + DATA_GAS_OTHER("管网哨兵(一体化)", "data_gas_other", "devcode,uptime,logtime,well_code", "DEVCODE,GASVAL, VBAT,SIN,RSRP,SINR,UPTIME,LOGTIME,sig,temp,SS_STATE as ssState", "logtime","VBAT,UPTIME"); public static DeviceDataEnum typeOf(String type) { DeviceDataEnum deviceDataEnum = null; @@ -28,6 +29,9 @@ case "燃气智能监测终端(一体化)": deviceDataEnum = DATA_GAS_LIQUID; break; + case "管网哨兵(一体化)": + deviceDataEnum = DATA_GAS_OTHER; + break; default: deviceDataEnum = null; } @@ -39,13 +43,15 @@ String tableColumns; String orderColumn; String type; + String cellColumn; - DeviceDataEnum(String type, String tableName, String queryColumns, String tableColumns, String orderColumn) { + DeviceDataEnum(String type, String tableName, String queryColumns, String tableColumns, String orderColumn,String cellColumn) { this.type = type; this.queryColumns = queryColumns; this.tableName = tableName; this.tableColumns = tableColumns; this.orderColumn = orderColumn; + this.cellColumn = cellColumn; ; } @@ -98,4 +104,12 @@ public void setType(String type) { this.type = type; } + + public String getCellColumn() { + return cellColumn; + } + + public void setCellColumn(String cellColumn) { + this.cellColumn = cellColumn; + } } diff --git a/casic-public/src/main/java/com/casic/missiles/enums/DeviceTypeEnum.java b/casic-public/src/main/java/com/casic/missiles/enums/DeviceTypeEnum.java index b372b6b..11cd89a 100644 --- a/casic-public/src/main/java/com/casic/missiles/enums/DeviceTypeEnum.java +++ b/casic-public/src/main/java/com/casic/missiles/enums/DeviceTypeEnum.java @@ -20,7 +20,8 @@ KAD("点型可燃气体探测器", 16,"data_kad"), PANTILT("激光甲烷云台", 17,"data_pan_gas"), PRESSURE("压力监测终端", 18,"data_pressure"), - GasDector("点型可燃气体探测器", 19,"data_gas_dector"); + GasDector("点型可燃气体探测器", 19,"data_gas_dector"), + LGGasOther("管网哨兵(一体化)", 20,"data_gas_other"); // 成员变量 private String name; diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/sensorHub/resolver/ResponseResolver.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/sensorHub/resolver/ResponseResolver.java index 09029f4..fda60a0 100644 --- a/casic-rest-api/src/main/java/com/casic/missiles/modular/sensorHub/resolver/ResponseResolver.java +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/sensorHub/resolver/ResponseResolver.java @@ -3,10 +3,7 @@ import com.alibaba.fastjson.JSONObject; import com.casic.missiles.enums.DeviceTypeEnum; import com.casic.missiles.modular.data.service.IDataAbstractService; -import com.casic.missiles.modular.data.service.impl.DataGasServiceImpl; -import com.casic.missiles.modular.data.service.impl.DataGasliquidGasServiceImpl; -import com.casic.missiles.modular.data.service.impl.DataMonitorPipeOtherServiceImpl; -import com.casic.missiles.modular.data.service.impl.DataTubeOtherServiceImpl; +import com.casic.missiles.modular.data.service.impl.*; import com.casic.missiles.util.SpringContextUtil; import org.springframework.stereotype.Component; @@ -21,6 +18,7 @@ private static DataGasliquidGasServiceImpl dataGasliquidGasService = SpringContextUtil.getApplicationContext().getBean(DataGasliquidGasServiceImpl.class); private static DataTubeOtherServiceImpl dataTubeOtherService = SpringContextUtil.getApplicationContext().getBean(DataTubeOtherServiceImpl.class); private static DataMonitorPipeOtherServiceImpl dataMonitorPipeOtherService = SpringContextUtil.getApplicationContext().getBean(DataMonitorPipeOtherServiceImpl.class); + private static DataGasOtherServiceImpl dataGasOtherService = SpringContextUtil.getApplicationContext().getBean(DataGasOtherServiceImpl.class); private static Map abstractResponseHashMap = new HashMap(); static { @@ -32,6 +30,7 @@ abstractResponseHashMap.put(DeviceTypeEnum.TubeOther.name(), dataTubeOtherService); abstractResponseHashMap.put(DeviceTypeEnum.MonitorPipeOther.name(), dataMonitorPipeOtherService); abstractResponseHashMap.put(DeviceTypeEnum.LG.name(), dataGasliquidGasService); + abstractResponseHashMap.put(DeviceTypeEnum.LGGasOther.name(), dataGasOtherService); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java index 03cb6a3..2aead9a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -65,7 +65,7 @@ //策略配置 .strategyConfig(builder -> { - builder.addInclude("sync_log","sync_log_detail") // 设置需要生成的表名 + builder.addInclude("data_gas_other") // 设置需要生成的表名 .addTablePrefix() // 设置过滤表前缀 .entityBuilder() //实体类配置 .enableLombok() //使用lombok diff --git a/casic-web/src/main/resources/config/application-dev.yml b/casic-web/src/main/resources/config/application-dev.yml index f5f95d4..dc535ea 100644 --- a/casic-web/src/main/resources/config/application-dev.yml +++ b/casic-web/src/main/resources/config/application-dev.yml @@ -22,16 +22,17 @@ redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer casic: #kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/websocket/*,/v2/api-docs,/v2/api-docs-ext,/doc.html,/v2/api-docs/swagger-ui.html,/swagger-resources,/webjars/**,/device/receiveData,/alarmReturn,/getMap,/system/busGrid/synAllGrids,/system/busLedger/synAllLedger,/system/busLedger/synAllDept,/system/ctUser/synAllUsers,/sync/token + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/websocket/*,/v2/api-docs,/v2/api-docs-ext,/doc.html,/v2/api-docs/swagger-ui.html,/swagger-resources,/webjars/**,/device/receiveData,/alarmReturn,/getMap,/system/busGrid/synAllGrids,/system/busLedger/synAllLedger,/system/busLedger/synAllDept,/system/ctUser/synAllUsers,/sync/token,/ptz/acceptGasData,/ptz/acceptAlarmData #flowable数据源和多数据源配置 db: init: enable: false brAppUrl: http://10.30.7.26:20115/monitorDataReceive/alarmPush brPanGetDevcodeUrl: http://172.17.240.116:9092/ranshitong/device/getOneDevice - brPanControlUrl: http://172.17.240.116:9092/HkController/controCearm - brPanVideoUrl: http://172.17.240.116:9092/HkController/getPlayBackUrl - brPanRealVideoUrl: http://172.17.240.116:9092/HkController/getUrl + brPanControlUrl: http://172.17.240.116:9092/HK/controCearm + brPanVideoUrl: http://172.17.240.116:9092/HK/getPlayBackUrl + brPanRealVideoUrl: http://172.17.240.116:9092/HK/getUrl + brSendConfigUrl: http://172.17.112.21:4011 enabled: true smartcity: config: diff --git a/casic-web/src/main/resources/config/application.yml b/casic-web/src/main/resources/config/application.yml index cf7d8ea..a9e6b20 100644 --- a/casic-web/src/main/resources/config/application.yml +++ b/casic-web/src/main/resources/config/application.yml @@ -31,7 +31,7 @@ export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ knife4j: - groups: 设备、台账基础信息相关包:com.casic.missiles.modular.device,基础业务包:com.casic.missiles.modular.system,报警业务包:com.casic.missiles.modular.alarm,app端业务包:com.casic.missiles.modular.app,sensorHub端业务包:com.casic.missiles.modular.sensorHub,第三方app端对接业务包:com.casic.missiles.modular.appOther + groups: 设备、台账基础信息相关包:com.casic.missiles.modular.device,基础业务包:com.casic.missiles.modular.system,报警业务包:com.casic.missiles.modular.alarm,app端业务包:com.casic.missiles.modular.app,sensorHub端业务包:com.casic.missiles.modular.sensorHub,第三方app端对接业务包:com.casic.missiles.modular.appOther,云台对接业务包:com.casic.missiles.modular.ptz device: redis: invalid-time: 86400 diff --git a/casic-web/src/main/resources/config/temp/device_template.xlsx b/casic-web/src/main/resources/config/temp/device_template.xlsx index 4d254f7..5e28020 100644 --- a/casic-web/src/main/resources/config/temp/device_template.xlsx +++ b/casic-web/src/main/resources/config/temp/device_template.xlsx Binary files differ diff --git a/casic-web/src/main/resources/config/temp/wellInfo_template.xlsx b/casic-web/src/main/resources/config/temp/wellInfo_template.xlsx new file mode 100644 index 0000000..e4e58a2 --- /dev/null +++ b/casic-web/src/main/resources/config/temp/wellInfo_template.xlsx Binary files differ