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 c8583d1..18b16e5 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 @@ -346,7 +346,7 @@ ay.ALARM_CATEGORY, ac.ALARM_LEVEL as alarmLevelName, bm.NAME AS manufactureName, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.CANCEL_TIME) as cancelDuration + TIMESTAMPDIFF(MINUTE, rd.TS, rd.CANCEL_TIME) as cancelDuration FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -377,11 +377,14 @@ lr.ledgerName, lr.DEPTID, lr.id as ledgerId, + lr.lngGaode, + lr.latGaode, + lr.type as watchObject, bd.INSTALL_DATE, ay.ALARM_CATEGORY, ac.ALARM_LEVEL as alarmLevelName, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.CANCEL_TIME) as cancelDuration, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.PROCESS_TIME) as processDuration, + TIMESTAMPDIFF(SECOND, rd.TS, rd.CANCEL_TIME) as cancelDuration, + TIMESTAMPDIFF(SECOND, rd.TS, rd.PROCESS_TIME) as processDuration, bm.`NAME` AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -541,15 +544,22 @@ SELECT - rd.*, - at.alarm_type, - bt.TYPE_NAME as devTypeName - FROM - alarm_records rd - LEFT JOIN bus_ledger_all_view lr ON lr.ledgerCode = rd.LEDGER_CODE - LEFT JOIN alarm_type at ON at.ID = rd.ALARM_TYPE_ID - LEFT JOIN bus_device bd ON bd.DEVCODE = rd.DEVCODE and bd.valid >0 - LEFT JOIN base_device_type bt ON bt.id = bd.DEVICE_TYPE + rd.*, + AT.alarm_type, + bt.TYPE_NAME AS devTypeName + FROM + alarm_records rd + LEFT JOIN bus_device bd ON bd.DEVCODE = rd.DEVCODE + AND bd.valid > 0 + LEFT JOIN bus_device_ledger bl ON bd.ID = bl.DEVICE_ID + AND bl.VALID = '1' + 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' + AND lr.ledgerCode = rd.LEDGER_CODE + LEFT JOIN alarm_type AT ON AT.ID = rd.ALARM_TYPE_ID + LEFT JOIN base_device_type bt ON bt.id = bd.DEVICE_TYPE where rd.STATUS ='1' and rd.EXCEPTION_TYPE='0' @@ -695,6 +705,7 @@ dt.LOGTIME, bv.tagNumber, bv.ledgerCode, + bv.ledgerName, bdt.TYPE_NAME, bv.place, bv.type, @@ -720,6 +731,7 @@ t.tagNumber, t.ledgerCode, t.TYPE_NAME, + t.ledgerName, t.OFF_DAYS, t.LOGTIME, t.place, diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml index 7aff0f0..a63dac1 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml @@ -25,34 +25,55 @@ 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 c8583d1..18b16e5 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 @@ -346,7 +346,7 @@ ay.ALARM_CATEGORY, ac.ALARM_LEVEL as alarmLevelName, bm.NAME AS manufactureName, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.CANCEL_TIME) as cancelDuration + TIMESTAMPDIFF(MINUTE, rd.TS, rd.CANCEL_TIME) as cancelDuration FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -377,11 +377,14 @@ lr.ledgerName, lr.DEPTID, lr.id as ledgerId, + lr.lngGaode, + lr.latGaode, + lr.type as watchObject, bd.INSTALL_DATE, ay.ALARM_CATEGORY, ac.ALARM_LEVEL as alarmLevelName, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.CANCEL_TIME) as cancelDuration, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.PROCESS_TIME) as processDuration, + TIMESTAMPDIFF(SECOND, rd.TS, rd.CANCEL_TIME) as cancelDuration, + TIMESTAMPDIFF(SECOND, rd.TS, rd.PROCESS_TIME) as processDuration, bm.`NAME` AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -541,15 +544,22 @@ - SELECT count(1) as sum,"1" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where `STATUS` ='1' - and ar.EXCEPTION_TYPE='0' + + WITH alarm_temp as (SELECT + ar.id, + ar.ts, + lr.DEPTID + FROM + `alarm_records` ar + LEFT JOIN bus_device bd ON ar.DEVCODE = bd.DEVCODE + AND bd.VALID > 0 + LEFT JOIN bus_device_ledger bl ON bd.ID = bl.DEVICE_ID + AND bl.VALID = '1' + JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID + AND lr.type = bl.type + AND lr.VALID = '1' + AND lr.ledgerCode = ar.LEDGER_CODE + WHERE + `STATUS` = '1' + AND ar.EXCEPTION_TYPE = '0'),alarms_temp as( + SELECT ar.id, ar.ts, bl.DEPTID FROM `alarm_records` ar join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.EXCEPTION_TYPE='0' + ) + SELECT count(1) as sum,"1" as type FROM alarm_temp ar + + + and ar.DEPTID in (${deptStrs}) + + + UNION ALL + SELECT count(1) as sum,"2" as type FROM alarms_temp ar where ar.TS>=CURDATE() + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"2" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>=CURDATE() - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"3" as type FROM alarms_temp ar where ar.TS>= CURDATE() - INTERVAL DAYOFWEEK(CURDATE()) - 2 DAY + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"3" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>= CURDATE() - INTERVAL DAYOFWEEK(CURDATE()) - 2 DAY - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"4" as type FROM alarms_temp ar where ar.TS>=DATE_FORMAT(NOW(),'%Y-%m-01') + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"4" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>=DATE_FORMAT(NOW(),'%Y-%m-01') - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"5" as type FROM alarms_temp ar where ar.TS>= DATE_FORMAT(CURDATE(), '%Y-01-01') + - and bl.DEPTID in (${deptStrs}) - - UNION ALL - SELECT count(1) as sum,"5" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>= DATE_FORMAT(CURDATE(), '%Y-01-01') - and ar.EXCEPTION_TYPE='0' - - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java index 3e0edd6..9dab3a7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java @@ -71,4 +71,18 @@ private Long deptid; + @ApiModelProperty("经度") + private String lngGaode; + + @ApiModelProperty("纬度") + private String latGaode; + + @ApiModelProperty("监测类型") + private String watchObject; + + @ApiModelProperty("点位id") + private Long ledgerId; + + + } 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 c8583d1..18b16e5 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 @@ -346,7 +346,7 @@ ay.ALARM_CATEGORY, ac.ALARM_LEVEL as alarmLevelName, bm.NAME AS manufactureName, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.CANCEL_TIME) as cancelDuration + TIMESTAMPDIFF(MINUTE, rd.TS, rd.CANCEL_TIME) as cancelDuration FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -377,11 +377,14 @@ lr.ledgerName, lr.DEPTID, lr.id as ledgerId, + lr.lngGaode, + lr.latGaode, + lr.type as watchObject, bd.INSTALL_DATE, ay.ALARM_CATEGORY, ac.ALARM_LEVEL as alarmLevelName, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.CANCEL_TIME) as cancelDuration, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.PROCESS_TIME) as processDuration, + TIMESTAMPDIFF(SECOND, rd.TS, rd.CANCEL_TIME) as cancelDuration, + TIMESTAMPDIFF(SECOND, rd.TS, rd.PROCESS_TIME) as processDuration, bm.`NAME` AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -541,15 +544,22 @@ - SELECT count(1) as sum,"1" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where `STATUS` ='1' - and ar.EXCEPTION_TYPE='0' + + WITH alarm_temp as (SELECT + ar.id, + ar.ts, + lr.DEPTID + FROM + `alarm_records` ar + LEFT JOIN bus_device bd ON ar.DEVCODE = bd.DEVCODE + AND bd.VALID > 0 + LEFT JOIN bus_device_ledger bl ON bd.ID = bl.DEVICE_ID + AND bl.VALID = '1' + JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID + AND lr.type = bl.type + AND lr.VALID = '1' + AND lr.ledgerCode = ar.LEDGER_CODE + WHERE + `STATUS` = '1' + AND ar.EXCEPTION_TYPE = '0'),alarms_temp as( + SELECT ar.id, ar.ts, bl.DEPTID FROM `alarm_records` ar join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.EXCEPTION_TYPE='0' + ) + SELECT count(1) as sum,"1" as type FROM alarm_temp ar + + + and ar.DEPTID in (${deptStrs}) + + + UNION ALL + SELECT count(1) as sum,"2" as type FROM alarms_temp ar where ar.TS>=CURDATE() + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"2" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>=CURDATE() - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"3" as type FROM alarms_temp ar where ar.TS>= CURDATE() - INTERVAL DAYOFWEEK(CURDATE()) - 2 DAY + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"3" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>= CURDATE() - INTERVAL DAYOFWEEK(CURDATE()) - 2 DAY - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"4" as type FROM alarms_temp ar where ar.TS>=DATE_FORMAT(NOW(),'%Y-%m-01') + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"4" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>=DATE_FORMAT(NOW(),'%Y-%m-01') - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"5" as type FROM alarms_temp ar where ar.TS>= DATE_FORMAT(CURDATE(), '%Y-01-01') + - and bl.DEPTID in (${deptStrs}) - - UNION ALL - SELECT count(1) as sum,"5" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>= DATE_FORMAT(CURDATE(), '%Y-01-01') - and ar.EXCEPTION_TYPE='0' - - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java index 3e0edd6..9dab3a7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java @@ -71,4 +71,18 @@ private Long deptid; + @ApiModelProperty("经度") + private String lngGaode; + + @ApiModelProperty("纬度") + private String latGaode; + + @ApiModelProperty("监测类型") + private String watchObject; + + @ApiModelProperty("点位id") + private Long ledgerId; + + + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java index e938da8..60464c4 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java @@ -12,6 +12,7 @@ private String deviceType; private String tagNumber; private String ledgerCode; + private String ledgerName; private String place; //台账类型 private String type; 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 c8583d1..18b16e5 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 @@ -346,7 +346,7 @@ ay.ALARM_CATEGORY, ac.ALARM_LEVEL as alarmLevelName, bm.NAME AS manufactureName, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.CANCEL_TIME) as cancelDuration + TIMESTAMPDIFF(MINUTE, rd.TS, rd.CANCEL_TIME) as cancelDuration FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -377,11 +377,14 @@ lr.ledgerName, lr.DEPTID, lr.id as ledgerId, + lr.lngGaode, + lr.latGaode, + lr.type as watchObject, bd.INSTALL_DATE, ay.ALARM_CATEGORY, ac.ALARM_LEVEL as alarmLevelName, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.CANCEL_TIME) as cancelDuration, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.PROCESS_TIME) as processDuration, + TIMESTAMPDIFF(SECOND, rd.TS, rd.CANCEL_TIME) as cancelDuration, + TIMESTAMPDIFF(SECOND, rd.TS, rd.PROCESS_TIME) as processDuration, bm.`NAME` AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -541,15 +544,22 @@ - SELECT count(1) as sum,"1" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where `STATUS` ='1' - and ar.EXCEPTION_TYPE='0' + + WITH alarm_temp as (SELECT + ar.id, + ar.ts, + lr.DEPTID + FROM + `alarm_records` ar + LEFT JOIN bus_device bd ON ar.DEVCODE = bd.DEVCODE + AND bd.VALID > 0 + LEFT JOIN bus_device_ledger bl ON bd.ID = bl.DEVICE_ID + AND bl.VALID = '1' + JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID + AND lr.type = bl.type + AND lr.VALID = '1' + AND lr.ledgerCode = ar.LEDGER_CODE + WHERE + `STATUS` = '1' + AND ar.EXCEPTION_TYPE = '0'),alarms_temp as( + SELECT ar.id, ar.ts, bl.DEPTID FROM `alarm_records` ar join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.EXCEPTION_TYPE='0' + ) + SELECT count(1) as sum,"1" as type FROM alarm_temp ar + + + and ar.DEPTID in (${deptStrs}) + + + UNION ALL + SELECT count(1) as sum,"2" as type FROM alarms_temp ar where ar.TS>=CURDATE() + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"2" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>=CURDATE() - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"3" as type FROM alarms_temp ar where ar.TS>= CURDATE() - INTERVAL DAYOFWEEK(CURDATE()) - 2 DAY + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"3" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>= CURDATE() - INTERVAL DAYOFWEEK(CURDATE()) - 2 DAY - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"4" as type FROM alarms_temp ar where ar.TS>=DATE_FORMAT(NOW(),'%Y-%m-01') + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"4" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>=DATE_FORMAT(NOW(),'%Y-%m-01') - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"5" as type FROM alarms_temp ar where ar.TS>= DATE_FORMAT(CURDATE(), '%Y-01-01') + - and bl.DEPTID in (${deptStrs}) - - UNION ALL - SELECT count(1) as sum,"5" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>= DATE_FORMAT(CURDATE(), '%Y-01-01') - and ar.EXCEPTION_TYPE='0' - - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java index 3e0edd6..9dab3a7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java @@ -71,4 +71,18 @@ private Long deptid; + @ApiModelProperty("经度") + private String lngGaode; + + @ApiModelProperty("纬度") + private String latGaode; + + @ApiModelProperty("监测类型") + private String watchObject; + + @ApiModelProperty("点位id") + private Long ledgerId; + + + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java index e938da8..60464c4 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java @@ -12,6 +12,7 @@ private String deviceType; private String tagNumber; private String ledgerCode; + private String ledgerName; private String place; //台账类型 private String type; 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 ac4cabe..e623df7 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 @@ -44,6 +44,7 @@ import static cn.hutool.core.date.DateUnit.DAY; import static com.casic.missiles.util.TimeConvertUtil.TimeConverter; +import static com.casic.missiles.util.TimeConvertUtil.TimeConverterSecond; /** *

@@ -180,8 +181,8 @@ public DeviceAlarmDetailDTO deviceAlarmDetail(Long id) { DeviceAlarmDetailDTO alarmDetail = this.baseMapper.deviceAlarmDetail(id); - alarmDetail.setCancelDuration(TimeConverter(alarmDetail.getCancelDuration())); - alarmDetail.setProcessDuration(TimeConverter(alarmDetail.getProcessDuration())); + alarmDetail.setCancelDuration(TimeConverterSecond(alarmDetail.getCancelDuration())); + alarmDetail.setProcessDuration(TimeConverterSecond(alarmDetail.getProcessDuration())); alarmDetail.setDeptName(ObjectUtil.isNotEmpty(alarmDetail.getDeptid()) ? commonServer.getDeptNamesByDeptId(alarmDetail.getDeptid()) : ""); // alarmDetail.setAddress(alarmDetail.getTagNumber().concat("|").concat(alarmDetail.getLedgerName())); alarmDetail.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmDetail.getAlarmCategory())); @@ -524,16 +525,26 @@ @Override public void cancelDeviceAlarm(String devCode) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("DEVCODE", devCode); - updateWrapper.eq("EXCEPTION_TYPE", "1"); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE", devCode); + queryWrapper.eq("EXCEPTION_TYPE", "1"); //只有挂起和已处置的才消 // updateWrapper.ge("PROCESS_STATUS", "3"); - updateWrapper.eq("STATUS", "1"); - updateWrapper.set("STATUS", "0"); - updateWrapper.set("CANCEL_TIME", new Date()); - this.update(updateWrapper); - //toDo:需要加流程取消日志 + queryWrapper.eq("STATUS", "1"); + List alarmRecordsList = this.list(queryWrapper); + if (alarmRecordsList != null && alarmRecordsList.size() > 0) { + alarmRecordsList.forEach(alarmRecords -> { + alarmRecords.setStatus("0"); + alarmRecords.setCancelTime(new Date()); + alarmRecords.setPreProcessStatus(alarmRecords.getProcessStatus()); + alarmRecords.setProcessStatus(ApprovalStatusEnum.FINISHED.getCode()); + this.updateById(alarmRecords); + }); + //添加流程日志 + approvalLogMapper.insert(new ApprovalLog(alarmRecordsList.get(0).getId(), "1", + "", ApprovalStatusEnum.FINISHED.getCode(), + null)); + } } @Override @@ -674,8 +685,12 @@ AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), data.concat("%LEL"), data, - alarmRuleResponseDTO.getAlarmLevelId(),DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmLevelId(), DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmRuleResponseDTO.getAlarmTypeName(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -721,7 +736,7 @@ @Override - public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime,List busWellDTOList, + public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime, List busWellDTOList, Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { @@ -730,8 +745,12 @@ try { AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, - alarmLevelId, DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmLevelId, DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmTypeName, + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace() + , "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -793,7 +812,11 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.get().getAlarmTypeId(), alarmRuleResponseDTO.get().getAlarmTypeName(), alarmRuleResponseDTO.get().getAlarmLevelId(), DateUtil.parse(logTime), - alarmRuleResponseDTO.get().getAlarmThreshold(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "1"); + alarmRuleResponseDTO.get().getAlarmThreshold(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "1"); this.save(alarmRecords); } catch (Exception e) { e.printStackTrace(); @@ -846,8 +869,8 @@ * @param cell */ @Override - public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent,String logTime) { - this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent,DateUtil.parse(logTime)); + public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent, String logTime) { + this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent, DateUtil.parse(logTime)); } @Override @@ -903,7 +926,10 @@ offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), - offDeviceDTO.getPlace(), "1"); + ObjectUtil.isNotEmpty(offDeviceDTO.getLedgerName()) ? + offDeviceDTO.getTagNumber().concat("|"). + concat(offDeviceDTO.getLedgerName()) : + offDeviceDTO.getPlace(), "1"); alarmRecordsList.add(alarmRecords); ledgers.add(offDeviceDTO); } 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 c8583d1..18b16e5 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 @@ -346,7 +346,7 @@ ay.ALARM_CATEGORY, ac.ALARM_LEVEL as alarmLevelName, bm.NAME AS manufactureName, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.CANCEL_TIME) as cancelDuration + TIMESTAMPDIFF(MINUTE, rd.TS, rd.CANCEL_TIME) as cancelDuration FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -377,11 +377,14 @@ lr.ledgerName, lr.DEPTID, lr.id as ledgerId, + lr.lngGaode, + lr.latGaode, + lr.type as watchObject, bd.INSTALL_DATE, ay.ALARM_CATEGORY, ac.ALARM_LEVEL as alarmLevelName, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.CANCEL_TIME) as cancelDuration, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.PROCESS_TIME) as processDuration, + TIMESTAMPDIFF(SECOND, rd.TS, rd.CANCEL_TIME) as cancelDuration, + TIMESTAMPDIFF(SECOND, rd.TS, rd.PROCESS_TIME) as processDuration, bm.`NAME` AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -541,15 +544,22 @@ - SELECT count(1) as sum,"1" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where `STATUS` ='1' - and ar.EXCEPTION_TYPE='0' + + WITH alarm_temp as (SELECT + ar.id, + ar.ts, + lr.DEPTID + FROM + `alarm_records` ar + LEFT JOIN bus_device bd ON ar.DEVCODE = bd.DEVCODE + AND bd.VALID > 0 + LEFT JOIN bus_device_ledger bl ON bd.ID = bl.DEVICE_ID + AND bl.VALID = '1' + JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID + AND lr.type = bl.type + AND lr.VALID = '1' + AND lr.ledgerCode = ar.LEDGER_CODE + WHERE + `STATUS` = '1' + AND ar.EXCEPTION_TYPE = '0'),alarms_temp as( + SELECT ar.id, ar.ts, bl.DEPTID FROM `alarm_records` ar join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.EXCEPTION_TYPE='0' + ) + SELECT count(1) as sum,"1" as type FROM alarm_temp ar + + + and ar.DEPTID in (${deptStrs}) + + + UNION ALL + SELECT count(1) as sum,"2" as type FROM alarms_temp ar where ar.TS>=CURDATE() + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"2" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>=CURDATE() - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"3" as type FROM alarms_temp ar where ar.TS>= CURDATE() - INTERVAL DAYOFWEEK(CURDATE()) - 2 DAY + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"3" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>= CURDATE() - INTERVAL DAYOFWEEK(CURDATE()) - 2 DAY - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"4" as type FROM alarms_temp ar where ar.TS>=DATE_FORMAT(NOW(),'%Y-%m-01') + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"4" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>=DATE_FORMAT(NOW(),'%Y-%m-01') - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"5" as type FROM alarms_temp ar where ar.TS>= DATE_FORMAT(CURDATE(), '%Y-01-01') + - and bl.DEPTID in (${deptStrs}) - - UNION ALL - SELECT count(1) as sum,"5" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>= DATE_FORMAT(CURDATE(), '%Y-01-01') - and ar.EXCEPTION_TYPE='0' - - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java index 3e0edd6..9dab3a7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java @@ -71,4 +71,18 @@ private Long deptid; + @ApiModelProperty("经度") + private String lngGaode; + + @ApiModelProperty("纬度") + private String latGaode; + + @ApiModelProperty("监测类型") + private String watchObject; + + @ApiModelProperty("点位id") + private Long ledgerId; + + + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java index e938da8..60464c4 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java @@ -12,6 +12,7 @@ private String deviceType; private String tagNumber; private String ledgerCode; + private String ledgerName; private String place; //台账类型 private String type; 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 ac4cabe..e623df7 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 @@ -44,6 +44,7 @@ import static cn.hutool.core.date.DateUnit.DAY; import static com.casic.missiles.util.TimeConvertUtil.TimeConverter; +import static com.casic.missiles.util.TimeConvertUtil.TimeConverterSecond; /** *

@@ -180,8 +181,8 @@ public DeviceAlarmDetailDTO deviceAlarmDetail(Long id) { DeviceAlarmDetailDTO alarmDetail = this.baseMapper.deviceAlarmDetail(id); - alarmDetail.setCancelDuration(TimeConverter(alarmDetail.getCancelDuration())); - alarmDetail.setProcessDuration(TimeConverter(alarmDetail.getProcessDuration())); + alarmDetail.setCancelDuration(TimeConverterSecond(alarmDetail.getCancelDuration())); + alarmDetail.setProcessDuration(TimeConverterSecond(alarmDetail.getProcessDuration())); alarmDetail.setDeptName(ObjectUtil.isNotEmpty(alarmDetail.getDeptid()) ? commonServer.getDeptNamesByDeptId(alarmDetail.getDeptid()) : ""); // alarmDetail.setAddress(alarmDetail.getTagNumber().concat("|").concat(alarmDetail.getLedgerName())); alarmDetail.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmDetail.getAlarmCategory())); @@ -524,16 +525,26 @@ @Override public void cancelDeviceAlarm(String devCode) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("DEVCODE", devCode); - updateWrapper.eq("EXCEPTION_TYPE", "1"); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE", devCode); + queryWrapper.eq("EXCEPTION_TYPE", "1"); //只有挂起和已处置的才消 // updateWrapper.ge("PROCESS_STATUS", "3"); - updateWrapper.eq("STATUS", "1"); - updateWrapper.set("STATUS", "0"); - updateWrapper.set("CANCEL_TIME", new Date()); - this.update(updateWrapper); - //toDo:需要加流程取消日志 + queryWrapper.eq("STATUS", "1"); + List alarmRecordsList = this.list(queryWrapper); + if (alarmRecordsList != null && alarmRecordsList.size() > 0) { + alarmRecordsList.forEach(alarmRecords -> { + alarmRecords.setStatus("0"); + alarmRecords.setCancelTime(new Date()); + alarmRecords.setPreProcessStatus(alarmRecords.getProcessStatus()); + alarmRecords.setProcessStatus(ApprovalStatusEnum.FINISHED.getCode()); + this.updateById(alarmRecords); + }); + //添加流程日志 + approvalLogMapper.insert(new ApprovalLog(alarmRecordsList.get(0).getId(), "1", + "", ApprovalStatusEnum.FINISHED.getCode(), + null)); + } } @Override @@ -674,8 +685,12 @@ AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), data.concat("%LEL"), data, - alarmRuleResponseDTO.getAlarmLevelId(),DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmLevelId(), DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmRuleResponseDTO.getAlarmTypeName(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -721,7 +736,7 @@ @Override - public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime,List busWellDTOList, + public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime, List busWellDTOList, Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { @@ -730,8 +745,12 @@ try { AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, - alarmLevelId, DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmLevelId, DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmTypeName, + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace() + , "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -793,7 +812,11 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.get().getAlarmTypeId(), alarmRuleResponseDTO.get().getAlarmTypeName(), alarmRuleResponseDTO.get().getAlarmLevelId(), DateUtil.parse(logTime), - alarmRuleResponseDTO.get().getAlarmThreshold(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "1"); + alarmRuleResponseDTO.get().getAlarmThreshold(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "1"); this.save(alarmRecords); } catch (Exception e) { e.printStackTrace(); @@ -846,8 +869,8 @@ * @param cell */ @Override - public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent,String logTime) { - this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent,DateUtil.parse(logTime)); + public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent, String logTime) { + this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent, DateUtil.parse(logTime)); } @Override @@ -903,7 +926,10 @@ offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), - offDeviceDTO.getPlace(), "1"); + ObjectUtil.isNotEmpty(offDeviceDTO.getLedgerName()) ? + offDeviceDTO.getTagNumber().concat("|"). + concat(offDeviceDTO.getLedgerName()) : + offDeviceDTO.getPlace(), "1"); alarmRecordsList.add(alarmRecords); ledgers.add(offDeviceDTO); } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java new file mode 100644 index 0000000..cb554b9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.data.dto; + + +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class PanDataDTO implements Serializable { + + private static final long serialVersionUID = 1232822221212L; + + private String dataTime; + + private String attributeType; + + private String dataValue; + + private String deviceCode; + + + +} 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 c8583d1..18b16e5 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 @@ -346,7 +346,7 @@ ay.ALARM_CATEGORY, ac.ALARM_LEVEL as alarmLevelName, bm.NAME AS manufactureName, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.CANCEL_TIME) as cancelDuration + TIMESTAMPDIFF(MINUTE, rd.TS, rd.CANCEL_TIME) as cancelDuration FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -377,11 +377,14 @@ lr.ledgerName, lr.DEPTID, lr.id as ledgerId, + lr.lngGaode, + lr.latGaode, + lr.type as watchObject, bd.INSTALL_DATE, ay.ALARM_CATEGORY, ac.ALARM_LEVEL as alarmLevelName, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.CANCEL_TIME) as cancelDuration, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.PROCESS_TIME) as processDuration, + TIMESTAMPDIFF(SECOND, rd.TS, rd.CANCEL_TIME) as cancelDuration, + TIMESTAMPDIFF(SECOND, rd.TS, rd.PROCESS_TIME) as processDuration, bm.`NAME` AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -541,15 +544,22 @@ - SELECT count(1) as sum,"1" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where `STATUS` ='1' - and ar.EXCEPTION_TYPE='0' + + WITH alarm_temp as (SELECT + ar.id, + ar.ts, + lr.DEPTID + FROM + `alarm_records` ar + LEFT JOIN bus_device bd ON ar.DEVCODE = bd.DEVCODE + AND bd.VALID > 0 + LEFT JOIN bus_device_ledger bl ON bd.ID = bl.DEVICE_ID + AND bl.VALID = '1' + JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID + AND lr.type = bl.type + AND lr.VALID = '1' + AND lr.ledgerCode = ar.LEDGER_CODE + WHERE + `STATUS` = '1' + AND ar.EXCEPTION_TYPE = '0'),alarms_temp as( + SELECT ar.id, ar.ts, bl.DEPTID FROM `alarm_records` ar join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.EXCEPTION_TYPE='0' + ) + SELECT count(1) as sum,"1" as type FROM alarm_temp ar + + + and ar.DEPTID in (${deptStrs}) + + + UNION ALL + SELECT count(1) as sum,"2" as type FROM alarms_temp ar where ar.TS>=CURDATE() + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"2" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>=CURDATE() - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"3" as type FROM alarms_temp ar where ar.TS>= CURDATE() - INTERVAL DAYOFWEEK(CURDATE()) - 2 DAY + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"3" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>= CURDATE() - INTERVAL DAYOFWEEK(CURDATE()) - 2 DAY - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"4" as type FROM alarms_temp ar where ar.TS>=DATE_FORMAT(NOW(),'%Y-%m-01') + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"4" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>=DATE_FORMAT(NOW(),'%Y-%m-01') - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"5" as type FROM alarms_temp ar where ar.TS>= DATE_FORMAT(CURDATE(), '%Y-01-01') + - and bl.DEPTID in (${deptStrs}) - - UNION ALL - SELECT count(1) as sum,"5" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>= DATE_FORMAT(CURDATE(), '%Y-01-01') - and ar.EXCEPTION_TYPE='0' - - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java index 3e0edd6..9dab3a7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java @@ -71,4 +71,18 @@ private Long deptid; + @ApiModelProperty("经度") + private String lngGaode; + + @ApiModelProperty("纬度") + private String latGaode; + + @ApiModelProperty("监测类型") + private String watchObject; + + @ApiModelProperty("点位id") + private Long ledgerId; + + + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java index e938da8..60464c4 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java @@ -12,6 +12,7 @@ private String deviceType; private String tagNumber; private String ledgerCode; + private String ledgerName; private String place; //台账类型 private String type; 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 ac4cabe..e623df7 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 @@ -44,6 +44,7 @@ import static cn.hutool.core.date.DateUnit.DAY; import static com.casic.missiles.util.TimeConvertUtil.TimeConverter; +import static com.casic.missiles.util.TimeConvertUtil.TimeConverterSecond; /** *

@@ -180,8 +181,8 @@ public DeviceAlarmDetailDTO deviceAlarmDetail(Long id) { DeviceAlarmDetailDTO alarmDetail = this.baseMapper.deviceAlarmDetail(id); - alarmDetail.setCancelDuration(TimeConverter(alarmDetail.getCancelDuration())); - alarmDetail.setProcessDuration(TimeConverter(alarmDetail.getProcessDuration())); + alarmDetail.setCancelDuration(TimeConverterSecond(alarmDetail.getCancelDuration())); + alarmDetail.setProcessDuration(TimeConverterSecond(alarmDetail.getProcessDuration())); alarmDetail.setDeptName(ObjectUtil.isNotEmpty(alarmDetail.getDeptid()) ? commonServer.getDeptNamesByDeptId(alarmDetail.getDeptid()) : ""); // alarmDetail.setAddress(alarmDetail.getTagNumber().concat("|").concat(alarmDetail.getLedgerName())); alarmDetail.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmDetail.getAlarmCategory())); @@ -524,16 +525,26 @@ @Override public void cancelDeviceAlarm(String devCode) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("DEVCODE", devCode); - updateWrapper.eq("EXCEPTION_TYPE", "1"); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE", devCode); + queryWrapper.eq("EXCEPTION_TYPE", "1"); //只有挂起和已处置的才消 // updateWrapper.ge("PROCESS_STATUS", "3"); - updateWrapper.eq("STATUS", "1"); - updateWrapper.set("STATUS", "0"); - updateWrapper.set("CANCEL_TIME", new Date()); - this.update(updateWrapper); - //toDo:需要加流程取消日志 + queryWrapper.eq("STATUS", "1"); + List alarmRecordsList = this.list(queryWrapper); + if (alarmRecordsList != null && alarmRecordsList.size() > 0) { + alarmRecordsList.forEach(alarmRecords -> { + alarmRecords.setStatus("0"); + alarmRecords.setCancelTime(new Date()); + alarmRecords.setPreProcessStatus(alarmRecords.getProcessStatus()); + alarmRecords.setProcessStatus(ApprovalStatusEnum.FINISHED.getCode()); + this.updateById(alarmRecords); + }); + //添加流程日志 + approvalLogMapper.insert(new ApprovalLog(alarmRecordsList.get(0).getId(), "1", + "", ApprovalStatusEnum.FINISHED.getCode(), + null)); + } } @Override @@ -674,8 +685,12 @@ AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), data.concat("%LEL"), data, - alarmRuleResponseDTO.getAlarmLevelId(),DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmLevelId(), DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmRuleResponseDTO.getAlarmTypeName(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -721,7 +736,7 @@ @Override - public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime,List busWellDTOList, + public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime, List busWellDTOList, Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { @@ -730,8 +745,12 @@ try { AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, - alarmLevelId, DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmLevelId, DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmTypeName, + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace() + , "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -793,7 +812,11 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.get().getAlarmTypeId(), alarmRuleResponseDTO.get().getAlarmTypeName(), alarmRuleResponseDTO.get().getAlarmLevelId(), DateUtil.parse(logTime), - alarmRuleResponseDTO.get().getAlarmThreshold(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "1"); + alarmRuleResponseDTO.get().getAlarmThreshold(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "1"); this.save(alarmRecords); } catch (Exception e) { e.printStackTrace(); @@ -846,8 +869,8 @@ * @param cell */ @Override - public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent,String logTime) { - this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent,DateUtil.parse(logTime)); + public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent, String logTime) { + this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent, DateUtil.parse(logTime)); } @Override @@ -903,7 +926,10 @@ offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), - offDeviceDTO.getPlace(), "1"); + ObjectUtil.isNotEmpty(offDeviceDTO.getLedgerName()) ? + offDeviceDTO.getTagNumber().concat("|"). + concat(offDeviceDTO.getLedgerName()) : + offDeviceDTO.getPlace(), "1"); alarmRecordsList.add(alarmRecords); ledgers.add(offDeviceDTO); } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java new file mode 100644 index 0000000..cb554b9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.data.dto; + + +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class PanDataDTO implements Serializable { + + private static final long serialVersionUID = 1232822221212L; + + private String dataTime; + + private String attributeType; + + private String dataValue; + + private String deviceCode; + + + +} 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 index a082d00..2a943ad 100644 --- 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 @@ -23,6 +23,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -37,6 +38,7 @@ * @author zt * @since 2025-01-22 */ +@Slf4j @RequiredArgsConstructor @Service public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { @@ -71,8 +73,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -80,8 +81,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}",devCode, e); } } @@ -141,8 +141,7 @@ } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -222,8 +221,10 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); +// e.printStackTrace(); +// log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); + } } } 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 c8583d1..18b16e5 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 @@ -346,7 +346,7 @@ ay.ALARM_CATEGORY, ac.ALARM_LEVEL as alarmLevelName, bm.NAME AS manufactureName, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.CANCEL_TIME) as cancelDuration + TIMESTAMPDIFF(MINUTE, rd.TS, rd.CANCEL_TIME) as cancelDuration FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -377,11 +377,14 @@ lr.ledgerName, lr.DEPTID, lr.id as ledgerId, + lr.lngGaode, + lr.latGaode, + lr.type as watchObject, bd.INSTALL_DATE, ay.ALARM_CATEGORY, ac.ALARM_LEVEL as alarmLevelName, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.CANCEL_TIME) as cancelDuration, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.PROCESS_TIME) as processDuration, + TIMESTAMPDIFF(SECOND, rd.TS, rd.CANCEL_TIME) as cancelDuration, + TIMESTAMPDIFF(SECOND, rd.TS, rd.PROCESS_TIME) as processDuration, bm.`NAME` AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -541,15 +544,22 @@ - SELECT count(1) as sum,"1" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where `STATUS` ='1' - and ar.EXCEPTION_TYPE='0' + + WITH alarm_temp as (SELECT + ar.id, + ar.ts, + lr.DEPTID + FROM + `alarm_records` ar + LEFT JOIN bus_device bd ON ar.DEVCODE = bd.DEVCODE + AND bd.VALID > 0 + LEFT JOIN bus_device_ledger bl ON bd.ID = bl.DEVICE_ID + AND bl.VALID = '1' + JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID + AND lr.type = bl.type + AND lr.VALID = '1' + AND lr.ledgerCode = ar.LEDGER_CODE + WHERE + `STATUS` = '1' + AND ar.EXCEPTION_TYPE = '0'),alarms_temp as( + SELECT ar.id, ar.ts, bl.DEPTID FROM `alarm_records` ar join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.EXCEPTION_TYPE='0' + ) + SELECT count(1) as sum,"1" as type FROM alarm_temp ar + + + and ar.DEPTID in (${deptStrs}) + + + UNION ALL + SELECT count(1) as sum,"2" as type FROM alarms_temp ar where ar.TS>=CURDATE() + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"2" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>=CURDATE() - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"3" as type FROM alarms_temp ar where ar.TS>= CURDATE() - INTERVAL DAYOFWEEK(CURDATE()) - 2 DAY + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"3" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>= CURDATE() - INTERVAL DAYOFWEEK(CURDATE()) - 2 DAY - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"4" as type FROM alarms_temp ar where ar.TS>=DATE_FORMAT(NOW(),'%Y-%m-01') + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"4" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>=DATE_FORMAT(NOW(),'%Y-%m-01') - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"5" as type FROM alarms_temp ar where ar.TS>= DATE_FORMAT(CURDATE(), '%Y-01-01') + - and bl.DEPTID in (${deptStrs}) - - UNION ALL - SELECT count(1) as sum,"5" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>= DATE_FORMAT(CURDATE(), '%Y-01-01') - and ar.EXCEPTION_TYPE='0' - - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java index 3e0edd6..9dab3a7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java @@ -71,4 +71,18 @@ private Long deptid; + @ApiModelProperty("经度") + private String lngGaode; + + @ApiModelProperty("纬度") + private String latGaode; + + @ApiModelProperty("监测类型") + private String watchObject; + + @ApiModelProperty("点位id") + private Long ledgerId; + + + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java index e938da8..60464c4 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java @@ -12,6 +12,7 @@ private String deviceType; private String tagNumber; private String ledgerCode; + private String ledgerName; private String place; //台账类型 private String type; 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 ac4cabe..e623df7 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 @@ -44,6 +44,7 @@ import static cn.hutool.core.date.DateUnit.DAY; import static com.casic.missiles.util.TimeConvertUtil.TimeConverter; +import static com.casic.missiles.util.TimeConvertUtil.TimeConverterSecond; /** *

@@ -180,8 +181,8 @@ public DeviceAlarmDetailDTO deviceAlarmDetail(Long id) { DeviceAlarmDetailDTO alarmDetail = this.baseMapper.deviceAlarmDetail(id); - alarmDetail.setCancelDuration(TimeConverter(alarmDetail.getCancelDuration())); - alarmDetail.setProcessDuration(TimeConverter(alarmDetail.getProcessDuration())); + alarmDetail.setCancelDuration(TimeConverterSecond(alarmDetail.getCancelDuration())); + alarmDetail.setProcessDuration(TimeConverterSecond(alarmDetail.getProcessDuration())); alarmDetail.setDeptName(ObjectUtil.isNotEmpty(alarmDetail.getDeptid()) ? commonServer.getDeptNamesByDeptId(alarmDetail.getDeptid()) : ""); // alarmDetail.setAddress(alarmDetail.getTagNumber().concat("|").concat(alarmDetail.getLedgerName())); alarmDetail.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmDetail.getAlarmCategory())); @@ -524,16 +525,26 @@ @Override public void cancelDeviceAlarm(String devCode) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("DEVCODE", devCode); - updateWrapper.eq("EXCEPTION_TYPE", "1"); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE", devCode); + queryWrapper.eq("EXCEPTION_TYPE", "1"); //只有挂起和已处置的才消 // updateWrapper.ge("PROCESS_STATUS", "3"); - updateWrapper.eq("STATUS", "1"); - updateWrapper.set("STATUS", "0"); - updateWrapper.set("CANCEL_TIME", new Date()); - this.update(updateWrapper); - //toDo:需要加流程取消日志 + queryWrapper.eq("STATUS", "1"); + List alarmRecordsList = this.list(queryWrapper); + if (alarmRecordsList != null && alarmRecordsList.size() > 0) { + alarmRecordsList.forEach(alarmRecords -> { + alarmRecords.setStatus("0"); + alarmRecords.setCancelTime(new Date()); + alarmRecords.setPreProcessStatus(alarmRecords.getProcessStatus()); + alarmRecords.setProcessStatus(ApprovalStatusEnum.FINISHED.getCode()); + this.updateById(alarmRecords); + }); + //添加流程日志 + approvalLogMapper.insert(new ApprovalLog(alarmRecordsList.get(0).getId(), "1", + "", ApprovalStatusEnum.FINISHED.getCode(), + null)); + } } @Override @@ -674,8 +685,12 @@ AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), data.concat("%LEL"), data, - alarmRuleResponseDTO.getAlarmLevelId(),DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmLevelId(), DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmRuleResponseDTO.getAlarmTypeName(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -721,7 +736,7 @@ @Override - public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime,List busWellDTOList, + public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime, List busWellDTOList, Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { @@ -730,8 +745,12 @@ try { AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, - alarmLevelId, DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmLevelId, DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmTypeName, + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace() + , "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -793,7 +812,11 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.get().getAlarmTypeId(), alarmRuleResponseDTO.get().getAlarmTypeName(), alarmRuleResponseDTO.get().getAlarmLevelId(), DateUtil.parse(logTime), - alarmRuleResponseDTO.get().getAlarmThreshold(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "1"); + alarmRuleResponseDTO.get().getAlarmThreshold(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "1"); this.save(alarmRecords); } catch (Exception e) { e.printStackTrace(); @@ -846,8 +869,8 @@ * @param cell */ @Override - public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent,String logTime) { - this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent,DateUtil.parse(logTime)); + public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent, String logTime) { + this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent, DateUtil.parse(logTime)); } @Override @@ -903,7 +926,10 @@ offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), - offDeviceDTO.getPlace(), "1"); + ObjectUtil.isNotEmpty(offDeviceDTO.getLedgerName()) ? + offDeviceDTO.getTagNumber().concat("|"). + concat(offDeviceDTO.getLedgerName()) : + offDeviceDTO.getPlace(), "1"); alarmRecordsList.add(alarmRecords); ledgers.add(offDeviceDTO); } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java new file mode 100644 index 0000000..cb554b9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.data.dto; + + +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class PanDataDTO implements Serializable { + + private static final long serialVersionUID = 1232822221212L; + + private String dataTime; + + private String attributeType; + + private String dataValue; + + private String deviceCode; + + + +} 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 index a082d00..2a943ad 100644 --- 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 @@ -23,6 +23,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -37,6 +38,7 @@ * @author zt * @since 2025-01-22 */ +@Slf4j @RequiredArgsConstructor @Service public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { @@ -71,8 +73,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -80,8 +81,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}",devCode, e); } } @@ -141,8 +141,7 @@ } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -222,8 +221,10 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); +// e.printStackTrace(); +// log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); + } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java index dd80611..cd24860 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java @@ -83,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -124,8 +123,7 @@ busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -200,8 +198,7 @@ alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } //低电量报警处理 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 c8583d1..18b16e5 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 @@ -346,7 +346,7 @@ ay.ALARM_CATEGORY, ac.ALARM_LEVEL as alarmLevelName, bm.NAME AS manufactureName, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.CANCEL_TIME) as cancelDuration + TIMESTAMPDIFF(MINUTE, rd.TS, rd.CANCEL_TIME) as cancelDuration FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -377,11 +377,14 @@ lr.ledgerName, lr.DEPTID, lr.id as ledgerId, + lr.lngGaode, + lr.latGaode, + lr.type as watchObject, bd.INSTALL_DATE, ay.ALARM_CATEGORY, ac.ALARM_LEVEL as alarmLevelName, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.CANCEL_TIME) as cancelDuration, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.PROCESS_TIME) as processDuration, + TIMESTAMPDIFF(SECOND, rd.TS, rd.CANCEL_TIME) as cancelDuration, + TIMESTAMPDIFF(SECOND, rd.TS, rd.PROCESS_TIME) as processDuration, bm.`NAME` AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -541,15 +544,22 @@ - SELECT count(1) as sum,"1" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where `STATUS` ='1' - and ar.EXCEPTION_TYPE='0' + + WITH alarm_temp as (SELECT + ar.id, + ar.ts, + lr.DEPTID + FROM + `alarm_records` ar + LEFT JOIN bus_device bd ON ar.DEVCODE = bd.DEVCODE + AND bd.VALID > 0 + LEFT JOIN bus_device_ledger bl ON bd.ID = bl.DEVICE_ID + AND bl.VALID = '1' + JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID + AND lr.type = bl.type + AND lr.VALID = '1' + AND lr.ledgerCode = ar.LEDGER_CODE + WHERE + `STATUS` = '1' + AND ar.EXCEPTION_TYPE = '0'),alarms_temp as( + SELECT ar.id, ar.ts, bl.DEPTID FROM `alarm_records` ar join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.EXCEPTION_TYPE='0' + ) + SELECT count(1) as sum,"1" as type FROM alarm_temp ar + + + and ar.DEPTID in (${deptStrs}) + + + UNION ALL + SELECT count(1) as sum,"2" as type FROM alarms_temp ar where ar.TS>=CURDATE() + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"2" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>=CURDATE() - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"3" as type FROM alarms_temp ar where ar.TS>= CURDATE() - INTERVAL DAYOFWEEK(CURDATE()) - 2 DAY + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"3" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>= CURDATE() - INTERVAL DAYOFWEEK(CURDATE()) - 2 DAY - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"4" as type FROM alarms_temp ar where ar.TS>=DATE_FORMAT(NOW(),'%Y-%m-01') + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"4" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>=DATE_FORMAT(NOW(),'%Y-%m-01') - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"5" as type FROM alarms_temp ar where ar.TS>= DATE_FORMAT(CURDATE(), '%Y-01-01') + - and bl.DEPTID in (${deptStrs}) - - UNION ALL - SELECT count(1) as sum,"5" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>= DATE_FORMAT(CURDATE(), '%Y-01-01') - and ar.EXCEPTION_TYPE='0' - - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java index 3e0edd6..9dab3a7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java @@ -71,4 +71,18 @@ private Long deptid; + @ApiModelProperty("经度") + private String lngGaode; + + @ApiModelProperty("纬度") + private String latGaode; + + @ApiModelProperty("监测类型") + private String watchObject; + + @ApiModelProperty("点位id") + private Long ledgerId; + + + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java index e938da8..60464c4 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java @@ -12,6 +12,7 @@ private String deviceType; private String tagNumber; private String ledgerCode; + private String ledgerName; private String place; //台账类型 private String type; 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 ac4cabe..e623df7 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 @@ -44,6 +44,7 @@ import static cn.hutool.core.date.DateUnit.DAY; import static com.casic.missiles.util.TimeConvertUtil.TimeConverter; +import static com.casic.missiles.util.TimeConvertUtil.TimeConverterSecond; /** *

@@ -180,8 +181,8 @@ public DeviceAlarmDetailDTO deviceAlarmDetail(Long id) { DeviceAlarmDetailDTO alarmDetail = this.baseMapper.deviceAlarmDetail(id); - alarmDetail.setCancelDuration(TimeConverter(alarmDetail.getCancelDuration())); - alarmDetail.setProcessDuration(TimeConverter(alarmDetail.getProcessDuration())); + alarmDetail.setCancelDuration(TimeConverterSecond(alarmDetail.getCancelDuration())); + alarmDetail.setProcessDuration(TimeConverterSecond(alarmDetail.getProcessDuration())); alarmDetail.setDeptName(ObjectUtil.isNotEmpty(alarmDetail.getDeptid()) ? commonServer.getDeptNamesByDeptId(alarmDetail.getDeptid()) : ""); // alarmDetail.setAddress(alarmDetail.getTagNumber().concat("|").concat(alarmDetail.getLedgerName())); alarmDetail.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmDetail.getAlarmCategory())); @@ -524,16 +525,26 @@ @Override public void cancelDeviceAlarm(String devCode) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("DEVCODE", devCode); - updateWrapper.eq("EXCEPTION_TYPE", "1"); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE", devCode); + queryWrapper.eq("EXCEPTION_TYPE", "1"); //只有挂起和已处置的才消 // updateWrapper.ge("PROCESS_STATUS", "3"); - updateWrapper.eq("STATUS", "1"); - updateWrapper.set("STATUS", "0"); - updateWrapper.set("CANCEL_TIME", new Date()); - this.update(updateWrapper); - //toDo:需要加流程取消日志 + queryWrapper.eq("STATUS", "1"); + List alarmRecordsList = this.list(queryWrapper); + if (alarmRecordsList != null && alarmRecordsList.size() > 0) { + alarmRecordsList.forEach(alarmRecords -> { + alarmRecords.setStatus("0"); + alarmRecords.setCancelTime(new Date()); + alarmRecords.setPreProcessStatus(alarmRecords.getProcessStatus()); + alarmRecords.setProcessStatus(ApprovalStatusEnum.FINISHED.getCode()); + this.updateById(alarmRecords); + }); + //添加流程日志 + approvalLogMapper.insert(new ApprovalLog(alarmRecordsList.get(0).getId(), "1", + "", ApprovalStatusEnum.FINISHED.getCode(), + null)); + } } @Override @@ -674,8 +685,12 @@ AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), data.concat("%LEL"), data, - alarmRuleResponseDTO.getAlarmLevelId(),DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmLevelId(), DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmRuleResponseDTO.getAlarmTypeName(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -721,7 +736,7 @@ @Override - public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime,List busWellDTOList, + public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime, List busWellDTOList, Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { @@ -730,8 +745,12 @@ try { AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, - alarmLevelId, DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmLevelId, DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmTypeName, + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace() + , "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -793,7 +812,11 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.get().getAlarmTypeId(), alarmRuleResponseDTO.get().getAlarmTypeName(), alarmRuleResponseDTO.get().getAlarmLevelId(), DateUtil.parse(logTime), - alarmRuleResponseDTO.get().getAlarmThreshold(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "1"); + alarmRuleResponseDTO.get().getAlarmThreshold(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "1"); this.save(alarmRecords); } catch (Exception e) { e.printStackTrace(); @@ -846,8 +869,8 @@ * @param cell */ @Override - public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent,String logTime) { - this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent,DateUtil.parse(logTime)); + public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent, String logTime) { + this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent, DateUtil.parse(logTime)); } @Override @@ -903,7 +926,10 @@ offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), - offDeviceDTO.getPlace(), "1"); + ObjectUtil.isNotEmpty(offDeviceDTO.getLedgerName()) ? + offDeviceDTO.getTagNumber().concat("|"). + concat(offDeviceDTO.getLedgerName()) : + offDeviceDTO.getPlace(), "1"); alarmRecordsList.add(alarmRecords); ledgers.add(offDeviceDTO); } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java new file mode 100644 index 0000000..cb554b9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.data.dto; + + +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class PanDataDTO implements Serializable { + + private static final long serialVersionUID = 1232822221212L; + + private String dataTime; + + private String attributeType; + + private String dataValue; + + private String deviceCode; + + + +} 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 index a082d00..2a943ad 100644 --- 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 @@ -23,6 +23,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -37,6 +38,7 @@ * @author zt * @since 2025-01-22 */ +@Slf4j @RequiredArgsConstructor @Service public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { @@ -71,8 +73,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -80,8 +81,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}",devCode, e); } } @@ -141,8 +141,7 @@ } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -222,8 +221,10 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); +// e.printStackTrace(); +// log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); + } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java index dd80611..cd24860 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java @@ -83,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -124,8 +123,7 @@ busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -200,8 +198,7 @@ alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } //低电量报警处理 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 302b446..f0def39 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 @@ -76,8 +76,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -85,8 +84,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -133,8 +131,7 @@ if (i < jsonArray.size() - 1) continue; busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -217,8 +214,7 @@ } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } 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 c8583d1..18b16e5 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 @@ -346,7 +346,7 @@ ay.ALARM_CATEGORY, ac.ALARM_LEVEL as alarmLevelName, bm.NAME AS manufactureName, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.CANCEL_TIME) as cancelDuration + TIMESTAMPDIFF(MINUTE, rd.TS, rd.CANCEL_TIME) as cancelDuration FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -377,11 +377,14 @@ lr.ledgerName, lr.DEPTID, lr.id as ledgerId, + lr.lngGaode, + lr.latGaode, + lr.type as watchObject, bd.INSTALL_DATE, ay.ALARM_CATEGORY, ac.ALARM_LEVEL as alarmLevelName, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.CANCEL_TIME) as cancelDuration, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.PROCESS_TIME) as processDuration, + TIMESTAMPDIFF(SECOND, rd.TS, rd.CANCEL_TIME) as cancelDuration, + TIMESTAMPDIFF(SECOND, rd.TS, rd.PROCESS_TIME) as processDuration, bm.`NAME` AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -541,15 +544,22 @@ - SELECT count(1) as sum,"1" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where `STATUS` ='1' - and ar.EXCEPTION_TYPE='0' + + WITH alarm_temp as (SELECT + ar.id, + ar.ts, + lr.DEPTID + FROM + `alarm_records` ar + LEFT JOIN bus_device bd ON ar.DEVCODE = bd.DEVCODE + AND bd.VALID > 0 + LEFT JOIN bus_device_ledger bl ON bd.ID = bl.DEVICE_ID + AND bl.VALID = '1' + JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID + AND lr.type = bl.type + AND lr.VALID = '1' + AND lr.ledgerCode = ar.LEDGER_CODE + WHERE + `STATUS` = '1' + AND ar.EXCEPTION_TYPE = '0'),alarms_temp as( + SELECT ar.id, ar.ts, bl.DEPTID FROM `alarm_records` ar join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.EXCEPTION_TYPE='0' + ) + SELECT count(1) as sum,"1" as type FROM alarm_temp ar + + + and ar.DEPTID in (${deptStrs}) + + + UNION ALL + SELECT count(1) as sum,"2" as type FROM alarms_temp ar where ar.TS>=CURDATE() + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"2" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>=CURDATE() - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"3" as type FROM alarms_temp ar where ar.TS>= CURDATE() - INTERVAL DAYOFWEEK(CURDATE()) - 2 DAY + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"3" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>= CURDATE() - INTERVAL DAYOFWEEK(CURDATE()) - 2 DAY - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"4" as type FROM alarms_temp ar where ar.TS>=DATE_FORMAT(NOW(),'%Y-%m-01') + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"4" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>=DATE_FORMAT(NOW(),'%Y-%m-01') - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"5" as type FROM alarms_temp ar where ar.TS>= DATE_FORMAT(CURDATE(), '%Y-01-01') + - and bl.DEPTID in (${deptStrs}) - - UNION ALL - SELECT count(1) as sum,"5" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>= DATE_FORMAT(CURDATE(), '%Y-01-01') - and ar.EXCEPTION_TYPE='0' - - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java index 3e0edd6..9dab3a7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java @@ -71,4 +71,18 @@ private Long deptid; + @ApiModelProperty("经度") + private String lngGaode; + + @ApiModelProperty("纬度") + private String latGaode; + + @ApiModelProperty("监测类型") + private String watchObject; + + @ApiModelProperty("点位id") + private Long ledgerId; + + + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java index e938da8..60464c4 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java @@ -12,6 +12,7 @@ private String deviceType; private String tagNumber; private String ledgerCode; + private String ledgerName; private String place; //台账类型 private String type; 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 ac4cabe..e623df7 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 @@ -44,6 +44,7 @@ import static cn.hutool.core.date.DateUnit.DAY; import static com.casic.missiles.util.TimeConvertUtil.TimeConverter; +import static com.casic.missiles.util.TimeConvertUtil.TimeConverterSecond; /** *

@@ -180,8 +181,8 @@ public DeviceAlarmDetailDTO deviceAlarmDetail(Long id) { DeviceAlarmDetailDTO alarmDetail = this.baseMapper.deviceAlarmDetail(id); - alarmDetail.setCancelDuration(TimeConverter(alarmDetail.getCancelDuration())); - alarmDetail.setProcessDuration(TimeConverter(alarmDetail.getProcessDuration())); + alarmDetail.setCancelDuration(TimeConverterSecond(alarmDetail.getCancelDuration())); + alarmDetail.setProcessDuration(TimeConverterSecond(alarmDetail.getProcessDuration())); alarmDetail.setDeptName(ObjectUtil.isNotEmpty(alarmDetail.getDeptid()) ? commonServer.getDeptNamesByDeptId(alarmDetail.getDeptid()) : ""); // alarmDetail.setAddress(alarmDetail.getTagNumber().concat("|").concat(alarmDetail.getLedgerName())); alarmDetail.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmDetail.getAlarmCategory())); @@ -524,16 +525,26 @@ @Override public void cancelDeviceAlarm(String devCode) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("DEVCODE", devCode); - updateWrapper.eq("EXCEPTION_TYPE", "1"); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE", devCode); + queryWrapper.eq("EXCEPTION_TYPE", "1"); //只有挂起和已处置的才消 // updateWrapper.ge("PROCESS_STATUS", "3"); - updateWrapper.eq("STATUS", "1"); - updateWrapper.set("STATUS", "0"); - updateWrapper.set("CANCEL_TIME", new Date()); - this.update(updateWrapper); - //toDo:需要加流程取消日志 + queryWrapper.eq("STATUS", "1"); + List alarmRecordsList = this.list(queryWrapper); + if (alarmRecordsList != null && alarmRecordsList.size() > 0) { + alarmRecordsList.forEach(alarmRecords -> { + alarmRecords.setStatus("0"); + alarmRecords.setCancelTime(new Date()); + alarmRecords.setPreProcessStatus(alarmRecords.getProcessStatus()); + alarmRecords.setProcessStatus(ApprovalStatusEnum.FINISHED.getCode()); + this.updateById(alarmRecords); + }); + //添加流程日志 + approvalLogMapper.insert(new ApprovalLog(alarmRecordsList.get(0).getId(), "1", + "", ApprovalStatusEnum.FINISHED.getCode(), + null)); + } } @Override @@ -674,8 +685,12 @@ AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), data.concat("%LEL"), data, - alarmRuleResponseDTO.getAlarmLevelId(),DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmLevelId(), DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmRuleResponseDTO.getAlarmTypeName(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -721,7 +736,7 @@ @Override - public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime,List busWellDTOList, + public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime, List busWellDTOList, Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { @@ -730,8 +745,12 @@ try { AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, - alarmLevelId, DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmLevelId, DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmTypeName, + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace() + , "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -793,7 +812,11 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.get().getAlarmTypeId(), alarmRuleResponseDTO.get().getAlarmTypeName(), alarmRuleResponseDTO.get().getAlarmLevelId(), DateUtil.parse(logTime), - alarmRuleResponseDTO.get().getAlarmThreshold(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "1"); + alarmRuleResponseDTO.get().getAlarmThreshold(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "1"); this.save(alarmRecords); } catch (Exception e) { e.printStackTrace(); @@ -846,8 +869,8 @@ * @param cell */ @Override - public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent,String logTime) { - this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent,DateUtil.parse(logTime)); + public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent, String logTime) { + this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent, DateUtil.parse(logTime)); } @Override @@ -903,7 +926,10 @@ offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), - offDeviceDTO.getPlace(), "1"); + ObjectUtil.isNotEmpty(offDeviceDTO.getLedgerName()) ? + offDeviceDTO.getTagNumber().concat("|"). + concat(offDeviceDTO.getLedgerName()) : + offDeviceDTO.getPlace(), "1"); alarmRecordsList.add(alarmRecords); ledgers.add(offDeviceDTO); } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java new file mode 100644 index 0000000..cb554b9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.data.dto; + + +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class PanDataDTO implements Serializable { + + private static final long serialVersionUID = 1232822221212L; + + private String dataTime; + + private String attributeType; + + private String dataValue; + + private String deviceCode; + + + +} 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 index a082d00..2a943ad 100644 --- 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 @@ -23,6 +23,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -37,6 +38,7 @@ * @author zt * @since 2025-01-22 */ +@Slf4j @RequiredArgsConstructor @Service public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { @@ -71,8 +73,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -80,8 +81,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}",devCode, e); } } @@ -141,8 +141,7 @@ } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -222,8 +221,10 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); +// e.printStackTrace(); +// log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); + } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java index dd80611..cd24860 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java @@ -83,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -124,8 +123,7 @@ busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -200,8 +198,7 @@ alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } //低电量报警处理 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 302b446..f0def39 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 @@ -76,8 +76,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -85,8 +84,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -133,8 +131,7 @@ if (i < jsonArray.size() - 1) continue; busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -217,8 +214,7 @@ } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } 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 e5ba8f7..a02af88 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataMonitorPipeOtherServiceImpl extends ServiceImpl implements IDataMonitorPipeOtherService, IDataAbstractService { @@ -73,8 +75,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -116,8 +116,7 @@ //2.写入新的报警 alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + log.error("处理报警时发生异常,devcode:{},e:{}", devCode, e); } } } @@ -160,8 +159,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmEventCode)); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -341,8 +339,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag || ObjectUtil.isNotEmpty(alarmContent) ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } 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 c8583d1..18b16e5 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 @@ -346,7 +346,7 @@ ay.ALARM_CATEGORY, ac.ALARM_LEVEL as alarmLevelName, bm.NAME AS manufactureName, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.CANCEL_TIME) as cancelDuration + TIMESTAMPDIFF(MINUTE, rd.TS, rd.CANCEL_TIME) as cancelDuration FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -377,11 +377,14 @@ lr.ledgerName, lr.DEPTID, lr.id as ledgerId, + lr.lngGaode, + lr.latGaode, + lr.type as watchObject, bd.INSTALL_DATE, ay.ALARM_CATEGORY, ac.ALARM_LEVEL as alarmLevelName, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.CANCEL_TIME) as cancelDuration, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.PROCESS_TIME) as processDuration, + TIMESTAMPDIFF(SECOND, rd.TS, rd.CANCEL_TIME) as cancelDuration, + TIMESTAMPDIFF(SECOND, rd.TS, rd.PROCESS_TIME) as processDuration, bm.`NAME` AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -541,15 +544,22 @@ - SELECT count(1) as sum,"1" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where `STATUS` ='1' - and ar.EXCEPTION_TYPE='0' + + WITH alarm_temp as (SELECT + ar.id, + ar.ts, + lr.DEPTID + FROM + `alarm_records` ar + LEFT JOIN bus_device bd ON ar.DEVCODE = bd.DEVCODE + AND bd.VALID > 0 + LEFT JOIN bus_device_ledger bl ON bd.ID = bl.DEVICE_ID + AND bl.VALID = '1' + JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID + AND lr.type = bl.type + AND lr.VALID = '1' + AND lr.ledgerCode = ar.LEDGER_CODE + WHERE + `STATUS` = '1' + AND ar.EXCEPTION_TYPE = '0'),alarms_temp as( + SELECT ar.id, ar.ts, bl.DEPTID FROM `alarm_records` ar join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.EXCEPTION_TYPE='0' + ) + SELECT count(1) as sum,"1" as type FROM alarm_temp ar + + + and ar.DEPTID in (${deptStrs}) + + + UNION ALL + SELECT count(1) as sum,"2" as type FROM alarms_temp ar where ar.TS>=CURDATE() + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"2" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>=CURDATE() - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"3" as type FROM alarms_temp ar where ar.TS>= CURDATE() - INTERVAL DAYOFWEEK(CURDATE()) - 2 DAY + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"3" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>= CURDATE() - INTERVAL DAYOFWEEK(CURDATE()) - 2 DAY - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"4" as type FROM alarms_temp ar where ar.TS>=DATE_FORMAT(NOW(),'%Y-%m-01') + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"4" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>=DATE_FORMAT(NOW(),'%Y-%m-01') - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"5" as type FROM alarms_temp ar where ar.TS>= DATE_FORMAT(CURDATE(), '%Y-01-01') + - and bl.DEPTID in (${deptStrs}) - - UNION ALL - SELECT count(1) as sum,"5" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>= DATE_FORMAT(CURDATE(), '%Y-01-01') - and ar.EXCEPTION_TYPE='0' - - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java index 3e0edd6..9dab3a7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java @@ -71,4 +71,18 @@ private Long deptid; + @ApiModelProperty("经度") + private String lngGaode; + + @ApiModelProperty("纬度") + private String latGaode; + + @ApiModelProperty("监测类型") + private String watchObject; + + @ApiModelProperty("点位id") + private Long ledgerId; + + + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java index e938da8..60464c4 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java @@ -12,6 +12,7 @@ private String deviceType; private String tagNumber; private String ledgerCode; + private String ledgerName; private String place; //台账类型 private String type; 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 ac4cabe..e623df7 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 @@ -44,6 +44,7 @@ import static cn.hutool.core.date.DateUnit.DAY; import static com.casic.missiles.util.TimeConvertUtil.TimeConverter; +import static com.casic.missiles.util.TimeConvertUtil.TimeConverterSecond; /** *

@@ -180,8 +181,8 @@ public DeviceAlarmDetailDTO deviceAlarmDetail(Long id) { DeviceAlarmDetailDTO alarmDetail = this.baseMapper.deviceAlarmDetail(id); - alarmDetail.setCancelDuration(TimeConverter(alarmDetail.getCancelDuration())); - alarmDetail.setProcessDuration(TimeConverter(alarmDetail.getProcessDuration())); + alarmDetail.setCancelDuration(TimeConverterSecond(alarmDetail.getCancelDuration())); + alarmDetail.setProcessDuration(TimeConverterSecond(alarmDetail.getProcessDuration())); alarmDetail.setDeptName(ObjectUtil.isNotEmpty(alarmDetail.getDeptid()) ? commonServer.getDeptNamesByDeptId(alarmDetail.getDeptid()) : ""); // alarmDetail.setAddress(alarmDetail.getTagNumber().concat("|").concat(alarmDetail.getLedgerName())); alarmDetail.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmDetail.getAlarmCategory())); @@ -524,16 +525,26 @@ @Override public void cancelDeviceAlarm(String devCode) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("DEVCODE", devCode); - updateWrapper.eq("EXCEPTION_TYPE", "1"); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE", devCode); + queryWrapper.eq("EXCEPTION_TYPE", "1"); //只有挂起和已处置的才消 // updateWrapper.ge("PROCESS_STATUS", "3"); - updateWrapper.eq("STATUS", "1"); - updateWrapper.set("STATUS", "0"); - updateWrapper.set("CANCEL_TIME", new Date()); - this.update(updateWrapper); - //toDo:需要加流程取消日志 + queryWrapper.eq("STATUS", "1"); + List alarmRecordsList = this.list(queryWrapper); + if (alarmRecordsList != null && alarmRecordsList.size() > 0) { + alarmRecordsList.forEach(alarmRecords -> { + alarmRecords.setStatus("0"); + alarmRecords.setCancelTime(new Date()); + alarmRecords.setPreProcessStatus(alarmRecords.getProcessStatus()); + alarmRecords.setProcessStatus(ApprovalStatusEnum.FINISHED.getCode()); + this.updateById(alarmRecords); + }); + //添加流程日志 + approvalLogMapper.insert(new ApprovalLog(alarmRecordsList.get(0).getId(), "1", + "", ApprovalStatusEnum.FINISHED.getCode(), + null)); + } } @Override @@ -674,8 +685,12 @@ AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), data.concat("%LEL"), data, - alarmRuleResponseDTO.getAlarmLevelId(),DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmLevelId(), DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmRuleResponseDTO.getAlarmTypeName(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -721,7 +736,7 @@ @Override - public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime,List busWellDTOList, + public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime, List busWellDTOList, Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { @@ -730,8 +745,12 @@ try { AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, - alarmLevelId, DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmLevelId, DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmTypeName, + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace() + , "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -793,7 +812,11 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.get().getAlarmTypeId(), alarmRuleResponseDTO.get().getAlarmTypeName(), alarmRuleResponseDTO.get().getAlarmLevelId(), DateUtil.parse(logTime), - alarmRuleResponseDTO.get().getAlarmThreshold(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "1"); + alarmRuleResponseDTO.get().getAlarmThreshold(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "1"); this.save(alarmRecords); } catch (Exception e) { e.printStackTrace(); @@ -846,8 +869,8 @@ * @param cell */ @Override - public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent,String logTime) { - this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent,DateUtil.parse(logTime)); + public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent, String logTime) { + this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent, DateUtil.parse(logTime)); } @Override @@ -903,7 +926,10 @@ offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), - offDeviceDTO.getPlace(), "1"); + ObjectUtil.isNotEmpty(offDeviceDTO.getLedgerName()) ? + offDeviceDTO.getTagNumber().concat("|"). + concat(offDeviceDTO.getLedgerName()) : + offDeviceDTO.getPlace(), "1"); alarmRecordsList.add(alarmRecords); ledgers.add(offDeviceDTO); } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java new file mode 100644 index 0000000..cb554b9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.data.dto; + + +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class PanDataDTO implements Serializable { + + private static final long serialVersionUID = 1232822221212L; + + private String dataTime; + + private String attributeType; + + private String dataValue; + + private String deviceCode; + + + +} 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 index a082d00..2a943ad 100644 --- 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 @@ -23,6 +23,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -37,6 +38,7 @@ * @author zt * @since 2025-01-22 */ +@Slf4j @RequiredArgsConstructor @Service public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { @@ -71,8 +73,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -80,8 +81,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}",devCode, e); } } @@ -141,8 +141,7 @@ } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -222,8 +221,10 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); +// e.printStackTrace(); +// log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); + } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java index dd80611..cd24860 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java @@ -83,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -124,8 +123,7 @@ busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -200,8 +198,7 @@ alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } //低电量报警处理 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 302b446..f0def39 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 @@ -76,8 +76,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -85,8 +84,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -133,8 +131,7 @@ if (i < jsonArray.size() - 1) continue; busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -217,8 +214,7 @@ } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } 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 e5ba8f7..a02af88 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataMonitorPipeOtherServiceImpl extends ServiceImpl implements IDataMonitorPipeOtherService, IDataAbstractService { @@ -73,8 +75,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -116,8 +116,7 @@ //2.写入新的报警 alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + log.error("处理报警时发生异常,devcode:{},e:{}", devCode, e); } } } @@ -160,8 +159,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmEventCode)); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -341,8 +339,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag || ObjectUtil.isNotEmpty(alarmContent) ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java index 5dc8c2b..f383690 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java @@ -2,7 +2,6 @@ import cn.hutool.core.date.DateUtil; 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; @@ -13,15 +12,20 @@ import com.casic.missiles.modular.alarm.service.IAlarmRuleService; import com.casic.missiles.modular.data.dao.DataGasMapper; import com.casic.missiles.modular.data.dao.DataPanGasMapper; +import com.casic.missiles.modular.data.dto.PanDataDTO; import com.casic.missiles.modular.data.entity.DataPanGas; import com.casic.missiles.modular.data.service.IDataPanGasService; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.CommonUtil; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonToken; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.io.IOException; import java.util.Date; import java.util.List; import java.util.Map; @@ -68,78 +72,179 @@ } - @Transactional @Override public boolean processAcceptGasData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); - JSONArray jsonArray = jsonObject.getJSONArray("data"); - String devCode = ""; - for (int i = 0; i < jsonArray.size(); i++) { - try { - devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); - if (ObjectUtil.isEmpty(devCode)) continue; - List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); - String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); - String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); - //暂只存浓度 - if ("2".equals(attributeType)) continue; - String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); - gas = String.format("%.2f", Double.valueOf(gas)); - //1.存数据 - save(DataPanGas.builder() - .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") - .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") - .deviceCode(devCode) - .concentration(gas) - .logtime(DateUtil.parseDateTime(dataTime)) - .build());//存储采集数据 - //2.有无超限处理流程(判断最后一条数据) -// if (i < jsonArray.size() - 1) continue; - - //3.清除设备告警 - alarmRecordsService.cancelDeviceAlarm(devCode); - //4.存报警 - //若没绑场站,则不产生报警 - boolean alarmFlag = false; - String bfcf = busDeviceService.getBfcf(devCode); - 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))) { - dataTime = dataTime.replaceAll("-", ""); - dataTime = dataTime.replaceAll(":", ""); - dataTime = dataTime.replaceAll("\\s+", ""); - alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); - } - break; - } - } - } - //5.清数据报警 - if (!alarmFlag) { - alarmRecordsService.cancelDataAlarm(devCode); - } - //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); - //7.更新监测井状态 (1:正常,2:报警) - if (busWellDTOList != null && busWellDTOList.size() > 0) { - alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); - } - } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + JsonFactory factory = new JsonFactory(); + try (JsonParser parser = factory.createParser(jsonObject.getString("data"))) { + // 定位到 "data" 数组 + while (parser.nextToken() != JsonToken.START_ARRAY) { + parser.nextToken(); } + // 逐条处理数据 + while (parser.nextToken() != JsonToken.END_ARRAY) { + if (parser.getCurrentToken() == JsonToken.START_OBJECT) { + processSingleData(parseJsonObject(parser)); + } + + } + } catch (IOException e) { + e.printStackTrace(); } + return true; } + private PanDataDTO parseJsonObject(JsonParser parser) throws IOException { + PanDataDTO panDataDTO = new PanDataDTO(); + while (parser.nextToken() != JsonToken.END_OBJECT) { + String fieldName = parser.getCurrentName(); + if ("dataTime".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataTime(parser.getText()); + } else if ("attributeType".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setAttributeType(parser.getText()); + } else if ("dataValue".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataValue(parser.getText()); + } else if ("deviceCode".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDeviceCode(parser.getText()); + } + } + return panDataDTO; + } + + + private void processSingleData(PanDataDTO panDataDTO) { + try { + String devCode = panDataDTO.getDeviceCode(); + if (ObjectUtil.isEmpty(devCode)) return; + List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); + String gas = panDataDTO.getDataValue(); + String attributeType = panDataDTO.getAttributeType(); + //暂只存浓度 + if ("2".equals(attributeType)) return; + String dataTime = panDataDTO.getDataTime(); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataPanGas.builder() + .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .deviceCode(devCode) + .concentration(gas) + .logtime(DateUtil.parseDateTime(dataTime)) + .build());//存储采集数据 + + boolean alarmFlag = false; + String bfcf = busDeviceService.getBfcf(devCode); + 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))) { +// dataTime = dataTime.replaceAll("-", ""); +// dataTime = dataTime.replaceAll(":", ""); +// dataTime = dataTime.replaceAll("\\s+", ""); + alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); + //7.更新监测井状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + log.error("处理云台数据时发生异常,devcode:{},data:{},e:{}", panDataDTO.getDeviceCode(), panDataDTO.toString(), e); + } + } + + +// @Transactional +// @Override +// public boolean processAcceptGasData(Map dataParams) { +// JSONObject jsonObject = new JSONObject(dataParams); +// JSONArray jsonArray = jsonObject.getJSONArray("data"); +// String devCode = ""; +// for (int i = 0; i < jsonArray.size(); i++) { +// try { +// devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); +// if (ObjectUtil.isEmpty(devCode)) continue; +// List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); +// String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); +// String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); +// //暂只存浓度 +// if ("2".equals(attributeType)) continue; +// String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); +// gas = String.format("%.2f", Double.valueOf(gas)); +// //1.存数据 +// save(DataPanGas.builder() +// .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") +// .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") +// .deviceCode(devCode) +// .concentration(gas) +// .logtime(DateUtil.parseDateTime(dataTime)) +// .build());//存储采集数据 +// //2.有无超限处理流程(判断最后一条数据) +//// if (i < jsonArray.size() - 1) continue; +// +// //3.清除设备告警 +//// alarmRecordsService.cancelDeviceAlarm(devCode); +// //4.存报警 +// //若没绑场站,则不产生报警 +// boolean alarmFlag = false; +// String bfcf = busDeviceService.getBfcf(devCode); +// 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))) { +//// dataTime = dataTime.replaceAll("-", ""); +//// dataTime = dataTime.replaceAll(":", ""); +//// dataTime = dataTime.replaceAll("\\s+", ""); +// alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); +// } +// break; +// } +// } +// } +// //5.清数据报警 +// if (!alarmFlag) { +// alarmRecordsService.cancelDataAlarm(devCode); +// } +// //6.更新电量及状态 (1:正常,2:报警) +// alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); +// //7.更新监测井状态 (1:正常,2:报警) +// if (busWellDTOList != null && busWellDTOList.size() > 0) { +// alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); +// } +// } catch (Exception e) { +// log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); +// } +// } +// return true; +// } + @Override public boolean acceptAlarmData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); 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 c8583d1..18b16e5 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 @@ -346,7 +346,7 @@ ay.ALARM_CATEGORY, ac.ALARM_LEVEL as alarmLevelName, bm.NAME AS manufactureName, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.CANCEL_TIME) as cancelDuration + TIMESTAMPDIFF(MINUTE, rd.TS, rd.CANCEL_TIME) as cancelDuration FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -377,11 +377,14 @@ lr.ledgerName, lr.DEPTID, lr.id as ledgerId, + lr.lngGaode, + lr.latGaode, + lr.type as watchObject, bd.INSTALL_DATE, ay.ALARM_CATEGORY, ac.ALARM_LEVEL as alarmLevelName, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.CANCEL_TIME) as cancelDuration, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.PROCESS_TIME) as processDuration, + TIMESTAMPDIFF(SECOND, rd.TS, rd.CANCEL_TIME) as cancelDuration, + TIMESTAMPDIFF(SECOND, rd.TS, rd.PROCESS_TIME) as processDuration, bm.`NAME` AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -541,15 +544,22 @@ - SELECT count(1) as sum,"1" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where `STATUS` ='1' - and ar.EXCEPTION_TYPE='0' + + WITH alarm_temp as (SELECT + ar.id, + ar.ts, + lr.DEPTID + FROM + `alarm_records` ar + LEFT JOIN bus_device bd ON ar.DEVCODE = bd.DEVCODE + AND bd.VALID > 0 + LEFT JOIN bus_device_ledger bl ON bd.ID = bl.DEVICE_ID + AND bl.VALID = '1' + JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID + AND lr.type = bl.type + AND lr.VALID = '1' + AND lr.ledgerCode = ar.LEDGER_CODE + WHERE + `STATUS` = '1' + AND ar.EXCEPTION_TYPE = '0'),alarms_temp as( + SELECT ar.id, ar.ts, bl.DEPTID FROM `alarm_records` ar join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.EXCEPTION_TYPE='0' + ) + SELECT count(1) as sum,"1" as type FROM alarm_temp ar + + + and ar.DEPTID in (${deptStrs}) + + + UNION ALL + SELECT count(1) as sum,"2" as type FROM alarms_temp ar where ar.TS>=CURDATE() + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"2" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>=CURDATE() - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"3" as type FROM alarms_temp ar where ar.TS>= CURDATE() - INTERVAL DAYOFWEEK(CURDATE()) - 2 DAY + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"3" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>= CURDATE() - INTERVAL DAYOFWEEK(CURDATE()) - 2 DAY - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"4" as type FROM alarms_temp ar where ar.TS>=DATE_FORMAT(NOW(),'%Y-%m-01') + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"4" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>=DATE_FORMAT(NOW(),'%Y-%m-01') - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"5" as type FROM alarms_temp ar where ar.TS>= DATE_FORMAT(CURDATE(), '%Y-01-01') + - and bl.DEPTID in (${deptStrs}) - - UNION ALL - SELECT count(1) as sum,"5" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>= DATE_FORMAT(CURDATE(), '%Y-01-01') - and ar.EXCEPTION_TYPE='0' - - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java index 3e0edd6..9dab3a7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java @@ -71,4 +71,18 @@ private Long deptid; + @ApiModelProperty("经度") + private String lngGaode; + + @ApiModelProperty("纬度") + private String latGaode; + + @ApiModelProperty("监测类型") + private String watchObject; + + @ApiModelProperty("点位id") + private Long ledgerId; + + + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java index e938da8..60464c4 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java @@ -12,6 +12,7 @@ private String deviceType; private String tagNumber; private String ledgerCode; + private String ledgerName; private String place; //台账类型 private String type; 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 ac4cabe..e623df7 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 @@ -44,6 +44,7 @@ import static cn.hutool.core.date.DateUnit.DAY; import static com.casic.missiles.util.TimeConvertUtil.TimeConverter; +import static com.casic.missiles.util.TimeConvertUtil.TimeConverterSecond; /** *

@@ -180,8 +181,8 @@ public DeviceAlarmDetailDTO deviceAlarmDetail(Long id) { DeviceAlarmDetailDTO alarmDetail = this.baseMapper.deviceAlarmDetail(id); - alarmDetail.setCancelDuration(TimeConverter(alarmDetail.getCancelDuration())); - alarmDetail.setProcessDuration(TimeConverter(alarmDetail.getProcessDuration())); + alarmDetail.setCancelDuration(TimeConverterSecond(alarmDetail.getCancelDuration())); + alarmDetail.setProcessDuration(TimeConverterSecond(alarmDetail.getProcessDuration())); alarmDetail.setDeptName(ObjectUtil.isNotEmpty(alarmDetail.getDeptid()) ? commonServer.getDeptNamesByDeptId(alarmDetail.getDeptid()) : ""); // alarmDetail.setAddress(alarmDetail.getTagNumber().concat("|").concat(alarmDetail.getLedgerName())); alarmDetail.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmDetail.getAlarmCategory())); @@ -524,16 +525,26 @@ @Override public void cancelDeviceAlarm(String devCode) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("DEVCODE", devCode); - updateWrapper.eq("EXCEPTION_TYPE", "1"); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE", devCode); + queryWrapper.eq("EXCEPTION_TYPE", "1"); //只有挂起和已处置的才消 // updateWrapper.ge("PROCESS_STATUS", "3"); - updateWrapper.eq("STATUS", "1"); - updateWrapper.set("STATUS", "0"); - updateWrapper.set("CANCEL_TIME", new Date()); - this.update(updateWrapper); - //toDo:需要加流程取消日志 + queryWrapper.eq("STATUS", "1"); + List alarmRecordsList = this.list(queryWrapper); + if (alarmRecordsList != null && alarmRecordsList.size() > 0) { + alarmRecordsList.forEach(alarmRecords -> { + alarmRecords.setStatus("0"); + alarmRecords.setCancelTime(new Date()); + alarmRecords.setPreProcessStatus(alarmRecords.getProcessStatus()); + alarmRecords.setProcessStatus(ApprovalStatusEnum.FINISHED.getCode()); + this.updateById(alarmRecords); + }); + //添加流程日志 + approvalLogMapper.insert(new ApprovalLog(alarmRecordsList.get(0).getId(), "1", + "", ApprovalStatusEnum.FINISHED.getCode(), + null)); + } } @Override @@ -674,8 +685,12 @@ AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), data.concat("%LEL"), data, - alarmRuleResponseDTO.getAlarmLevelId(),DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmLevelId(), DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmRuleResponseDTO.getAlarmTypeName(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -721,7 +736,7 @@ @Override - public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime,List busWellDTOList, + public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime, List busWellDTOList, Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { @@ -730,8 +745,12 @@ try { AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, - alarmLevelId, DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmLevelId, DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmTypeName, + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace() + , "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -793,7 +812,11 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.get().getAlarmTypeId(), alarmRuleResponseDTO.get().getAlarmTypeName(), alarmRuleResponseDTO.get().getAlarmLevelId(), DateUtil.parse(logTime), - alarmRuleResponseDTO.get().getAlarmThreshold(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "1"); + alarmRuleResponseDTO.get().getAlarmThreshold(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "1"); this.save(alarmRecords); } catch (Exception e) { e.printStackTrace(); @@ -846,8 +869,8 @@ * @param cell */ @Override - public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent,String logTime) { - this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent,DateUtil.parse(logTime)); + public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent, String logTime) { + this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent, DateUtil.parse(logTime)); } @Override @@ -903,7 +926,10 @@ offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), - offDeviceDTO.getPlace(), "1"); + ObjectUtil.isNotEmpty(offDeviceDTO.getLedgerName()) ? + offDeviceDTO.getTagNumber().concat("|"). + concat(offDeviceDTO.getLedgerName()) : + offDeviceDTO.getPlace(), "1"); alarmRecordsList.add(alarmRecords); ledgers.add(offDeviceDTO); } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java new file mode 100644 index 0000000..cb554b9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.data.dto; + + +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class PanDataDTO implements Serializable { + + private static final long serialVersionUID = 1232822221212L; + + private String dataTime; + + private String attributeType; + + private String dataValue; + + private String deviceCode; + + + +} 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 index a082d00..2a943ad 100644 --- 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 @@ -23,6 +23,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -37,6 +38,7 @@ * @author zt * @since 2025-01-22 */ +@Slf4j @RequiredArgsConstructor @Service public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { @@ -71,8 +73,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -80,8 +81,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}",devCode, e); } } @@ -141,8 +141,7 @@ } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -222,8 +221,10 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); +// e.printStackTrace(); +// log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); + } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java index dd80611..cd24860 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java @@ -83,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -124,8 +123,7 @@ busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -200,8 +198,7 @@ alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } //低电量报警处理 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 302b446..f0def39 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 @@ -76,8 +76,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -85,8 +84,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -133,8 +131,7 @@ if (i < jsonArray.size() - 1) continue; busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -217,8 +214,7 @@ } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } 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 e5ba8f7..a02af88 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataMonitorPipeOtherServiceImpl extends ServiceImpl implements IDataMonitorPipeOtherService, IDataAbstractService { @@ -73,8 +75,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -116,8 +116,7 @@ //2.写入新的报警 alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + log.error("处理报警时发生异常,devcode:{},e:{}", devCode, e); } } } @@ -160,8 +159,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmEventCode)); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -341,8 +339,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag || ObjectUtil.isNotEmpty(alarmContent) ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java index 5dc8c2b..f383690 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java @@ -2,7 +2,6 @@ import cn.hutool.core.date.DateUtil; 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; @@ -13,15 +12,20 @@ import com.casic.missiles.modular.alarm.service.IAlarmRuleService; import com.casic.missiles.modular.data.dao.DataGasMapper; import com.casic.missiles.modular.data.dao.DataPanGasMapper; +import com.casic.missiles.modular.data.dto.PanDataDTO; import com.casic.missiles.modular.data.entity.DataPanGas; import com.casic.missiles.modular.data.service.IDataPanGasService; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.CommonUtil; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonToken; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.io.IOException; import java.util.Date; import java.util.List; import java.util.Map; @@ -68,78 +72,179 @@ } - @Transactional @Override public boolean processAcceptGasData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); - JSONArray jsonArray = jsonObject.getJSONArray("data"); - String devCode = ""; - for (int i = 0; i < jsonArray.size(); i++) { - try { - devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); - if (ObjectUtil.isEmpty(devCode)) continue; - List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); - String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); - String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); - //暂只存浓度 - if ("2".equals(attributeType)) continue; - String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); - gas = String.format("%.2f", Double.valueOf(gas)); - //1.存数据 - save(DataPanGas.builder() - .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") - .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") - .deviceCode(devCode) - .concentration(gas) - .logtime(DateUtil.parseDateTime(dataTime)) - .build());//存储采集数据 - //2.有无超限处理流程(判断最后一条数据) -// if (i < jsonArray.size() - 1) continue; - - //3.清除设备告警 - alarmRecordsService.cancelDeviceAlarm(devCode); - //4.存报警 - //若没绑场站,则不产生报警 - boolean alarmFlag = false; - String bfcf = busDeviceService.getBfcf(devCode); - 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))) { - dataTime = dataTime.replaceAll("-", ""); - dataTime = dataTime.replaceAll(":", ""); - dataTime = dataTime.replaceAll("\\s+", ""); - alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); - } - break; - } - } - } - //5.清数据报警 - if (!alarmFlag) { - alarmRecordsService.cancelDataAlarm(devCode); - } - //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); - //7.更新监测井状态 (1:正常,2:报警) - if (busWellDTOList != null && busWellDTOList.size() > 0) { - alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); - } - } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + JsonFactory factory = new JsonFactory(); + try (JsonParser parser = factory.createParser(jsonObject.getString("data"))) { + // 定位到 "data" 数组 + while (parser.nextToken() != JsonToken.START_ARRAY) { + parser.nextToken(); } + // 逐条处理数据 + while (parser.nextToken() != JsonToken.END_ARRAY) { + if (parser.getCurrentToken() == JsonToken.START_OBJECT) { + processSingleData(parseJsonObject(parser)); + } + + } + } catch (IOException e) { + e.printStackTrace(); } + return true; } + private PanDataDTO parseJsonObject(JsonParser parser) throws IOException { + PanDataDTO panDataDTO = new PanDataDTO(); + while (parser.nextToken() != JsonToken.END_OBJECT) { + String fieldName = parser.getCurrentName(); + if ("dataTime".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataTime(parser.getText()); + } else if ("attributeType".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setAttributeType(parser.getText()); + } else if ("dataValue".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataValue(parser.getText()); + } else if ("deviceCode".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDeviceCode(parser.getText()); + } + } + return panDataDTO; + } + + + private void processSingleData(PanDataDTO panDataDTO) { + try { + String devCode = panDataDTO.getDeviceCode(); + if (ObjectUtil.isEmpty(devCode)) return; + List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); + String gas = panDataDTO.getDataValue(); + String attributeType = panDataDTO.getAttributeType(); + //暂只存浓度 + if ("2".equals(attributeType)) return; + String dataTime = panDataDTO.getDataTime(); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataPanGas.builder() + .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .deviceCode(devCode) + .concentration(gas) + .logtime(DateUtil.parseDateTime(dataTime)) + .build());//存储采集数据 + + boolean alarmFlag = false; + String bfcf = busDeviceService.getBfcf(devCode); + 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))) { +// dataTime = dataTime.replaceAll("-", ""); +// dataTime = dataTime.replaceAll(":", ""); +// dataTime = dataTime.replaceAll("\\s+", ""); + alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); + //7.更新监测井状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + log.error("处理云台数据时发生异常,devcode:{},data:{},e:{}", panDataDTO.getDeviceCode(), panDataDTO.toString(), e); + } + } + + +// @Transactional +// @Override +// public boolean processAcceptGasData(Map dataParams) { +// JSONObject jsonObject = new JSONObject(dataParams); +// JSONArray jsonArray = jsonObject.getJSONArray("data"); +// String devCode = ""; +// for (int i = 0; i < jsonArray.size(); i++) { +// try { +// devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); +// if (ObjectUtil.isEmpty(devCode)) continue; +// List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); +// String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); +// String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); +// //暂只存浓度 +// if ("2".equals(attributeType)) continue; +// String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); +// gas = String.format("%.2f", Double.valueOf(gas)); +// //1.存数据 +// save(DataPanGas.builder() +// .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") +// .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") +// .deviceCode(devCode) +// .concentration(gas) +// .logtime(DateUtil.parseDateTime(dataTime)) +// .build());//存储采集数据 +// //2.有无超限处理流程(判断最后一条数据) +//// if (i < jsonArray.size() - 1) continue; +// +// //3.清除设备告警 +//// alarmRecordsService.cancelDeviceAlarm(devCode); +// //4.存报警 +// //若没绑场站,则不产生报警 +// boolean alarmFlag = false; +// String bfcf = busDeviceService.getBfcf(devCode); +// 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))) { +//// dataTime = dataTime.replaceAll("-", ""); +//// dataTime = dataTime.replaceAll(":", ""); +//// dataTime = dataTime.replaceAll("\\s+", ""); +// alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); +// } +// break; +// } +// } +// } +// //5.清数据报警 +// if (!alarmFlag) { +// alarmRecordsService.cancelDataAlarm(devCode); +// } +// //6.更新电量及状态 (1:正常,2:报警) +// alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); +// //7.更新监测井状态 (1:正常,2:报警) +// if (busWellDTOList != null && busWellDTOList.size() > 0) { +// alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); +// } +// } catch (Exception e) { +// log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); +// } +// } +// return true; +// } + @Override public boolean acceptAlarmData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); 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 37d731d..a17953b 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataTubeOtherServiceImpl extends ServiceImpl implements IDataTubeOtherService, IDataAbstractService { @@ -73,7 +75,7 @@ } } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,7 +84,7 @@ imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -122,8 +124,8 @@ } //特殊处理消警 if ("CancelWaterImmersionAlarm".equals(alarmType)) { - if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { - alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + if (alarmRecordsService.isWatchAlarms(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelWatchAlarms(devCode, "WaterImmersionAlarm"); } continue; } @@ -146,8 +148,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmType)); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -227,8 +228,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } 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 c8583d1..18b16e5 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 @@ -346,7 +346,7 @@ ay.ALARM_CATEGORY, ac.ALARM_LEVEL as alarmLevelName, bm.NAME AS manufactureName, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.CANCEL_TIME) as cancelDuration + TIMESTAMPDIFF(MINUTE, rd.TS, rd.CANCEL_TIME) as cancelDuration FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -377,11 +377,14 @@ lr.ledgerName, lr.DEPTID, lr.id as ledgerId, + lr.lngGaode, + lr.latGaode, + lr.type as watchObject, bd.INSTALL_DATE, ay.ALARM_CATEGORY, ac.ALARM_LEVEL as alarmLevelName, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.CANCEL_TIME) as cancelDuration, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.PROCESS_TIME) as processDuration, + TIMESTAMPDIFF(SECOND, rd.TS, rd.CANCEL_TIME) as cancelDuration, + TIMESTAMPDIFF(SECOND, rd.TS, rd.PROCESS_TIME) as processDuration, bm.`NAME` AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -541,15 +544,22 @@ - SELECT count(1) as sum,"1" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where `STATUS` ='1' - and ar.EXCEPTION_TYPE='0' + + WITH alarm_temp as (SELECT + ar.id, + ar.ts, + lr.DEPTID + FROM + `alarm_records` ar + LEFT JOIN bus_device bd ON ar.DEVCODE = bd.DEVCODE + AND bd.VALID > 0 + LEFT JOIN bus_device_ledger bl ON bd.ID = bl.DEVICE_ID + AND bl.VALID = '1' + JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID + AND lr.type = bl.type + AND lr.VALID = '1' + AND lr.ledgerCode = ar.LEDGER_CODE + WHERE + `STATUS` = '1' + AND ar.EXCEPTION_TYPE = '0'),alarms_temp as( + SELECT ar.id, ar.ts, bl.DEPTID FROM `alarm_records` ar join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.EXCEPTION_TYPE='0' + ) + SELECT count(1) as sum,"1" as type FROM alarm_temp ar + + + and ar.DEPTID in (${deptStrs}) + + + UNION ALL + SELECT count(1) as sum,"2" as type FROM alarms_temp ar where ar.TS>=CURDATE() + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"2" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>=CURDATE() - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"3" as type FROM alarms_temp ar where ar.TS>= CURDATE() - INTERVAL DAYOFWEEK(CURDATE()) - 2 DAY + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"3" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>= CURDATE() - INTERVAL DAYOFWEEK(CURDATE()) - 2 DAY - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"4" as type FROM alarms_temp ar where ar.TS>=DATE_FORMAT(NOW(),'%Y-%m-01') + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"4" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>=DATE_FORMAT(NOW(),'%Y-%m-01') - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"5" as type FROM alarms_temp ar where ar.TS>= DATE_FORMAT(CURDATE(), '%Y-01-01') + - and bl.DEPTID in (${deptStrs}) - - UNION ALL - SELECT count(1) as sum,"5" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>= DATE_FORMAT(CURDATE(), '%Y-01-01') - and ar.EXCEPTION_TYPE='0' - - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java index 3e0edd6..9dab3a7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java @@ -71,4 +71,18 @@ private Long deptid; + @ApiModelProperty("经度") + private String lngGaode; + + @ApiModelProperty("纬度") + private String latGaode; + + @ApiModelProperty("监测类型") + private String watchObject; + + @ApiModelProperty("点位id") + private Long ledgerId; + + + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java index e938da8..60464c4 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java @@ -12,6 +12,7 @@ private String deviceType; private String tagNumber; private String ledgerCode; + private String ledgerName; private String place; //台账类型 private String type; 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 ac4cabe..e623df7 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 @@ -44,6 +44,7 @@ import static cn.hutool.core.date.DateUnit.DAY; import static com.casic.missiles.util.TimeConvertUtil.TimeConverter; +import static com.casic.missiles.util.TimeConvertUtil.TimeConverterSecond; /** *

@@ -180,8 +181,8 @@ public DeviceAlarmDetailDTO deviceAlarmDetail(Long id) { DeviceAlarmDetailDTO alarmDetail = this.baseMapper.deviceAlarmDetail(id); - alarmDetail.setCancelDuration(TimeConverter(alarmDetail.getCancelDuration())); - alarmDetail.setProcessDuration(TimeConverter(alarmDetail.getProcessDuration())); + alarmDetail.setCancelDuration(TimeConverterSecond(alarmDetail.getCancelDuration())); + alarmDetail.setProcessDuration(TimeConverterSecond(alarmDetail.getProcessDuration())); alarmDetail.setDeptName(ObjectUtil.isNotEmpty(alarmDetail.getDeptid()) ? commonServer.getDeptNamesByDeptId(alarmDetail.getDeptid()) : ""); // alarmDetail.setAddress(alarmDetail.getTagNumber().concat("|").concat(alarmDetail.getLedgerName())); alarmDetail.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmDetail.getAlarmCategory())); @@ -524,16 +525,26 @@ @Override public void cancelDeviceAlarm(String devCode) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("DEVCODE", devCode); - updateWrapper.eq("EXCEPTION_TYPE", "1"); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE", devCode); + queryWrapper.eq("EXCEPTION_TYPE", "1"); //只有挂起和已处置的才消 // updateWrapper.ge("PROCESS_STATUS", "3"); - updateWrapper.eq("STATUS", "1"); - updateWrapper.set("STATUS", "0"); - updateWrapper.set("CANCEL_TIME", new Date()); - this.update(updateWrapper); - //toDo:需要加流程取消日志 + queryWrapper.eq("STATUS", "1"); + List alarmRecordsList = this.list(queryWrapper); + if (alarmRecordsList != null && alarmRecordsList.size() > 0) { + alarmRecordsList.forEach(alarmRecords -> { + alarmRecords.setStatus("0"); + alarmRecords.setCancelTime(new Date()); + alarmRecords.setPreProcessStatus(alarmRecords.getProcessStatus()); + alarmRecords.setProcessStatus(ApprovalStatusEnum.FINISHED.getCode()); + this.updateById(alarmRecords); + }); + //添加流程日志 + approvalLogMapper.insert(new ApprovalLog(alarmRecordsList.get(0).getId(), "1", + "", ApprovalStatusEnum.FINISHED.getCode(), + null)); + } } @Override @@ -674,8 +685,12 @@ AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), data.concat("%LEL"), data, - alarmRuleResponseDTO.getAlarmLevelId(),DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmLevelId(), DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmRuleResponseDTO.getAlarmTypeName(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -721,7 +736,7 @@ @Override - public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime,List busWellDTOList, + public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime, List busWellDTOList, Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { @@ -730,8 +745,12 @@ try { AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, - alarmLevelId, DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmLevelId, DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmTypeName, + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace() + , "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -793,7 +812,11 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.get().getAlarmTypeId(), alarmRuleResponseDTO.get().getAlarmTypeName(), alarmRuleResponseDTO.get().getAlarmLevelId(), DateUtil.parse(logTime), - alarmRuleResponseDTO.get().getAlarmThreshold(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "1"); + alarmRuleResponseDTO.get().getAlarmThreshold(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "1"); this.save(alarmRecords); } catch (Exception e) { e.printStackTrace(); @@ -846,8 +869,8 @@ * @param cell */ @Override - public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent,String logTime) { - this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent,DateUtil.parse(logTime)); + public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent, String logTime) { + this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent, DateUtil.parse(logTime)); } @Override @@ -903,7 +926,10 @@ offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), - offDeviceDTO.getPlace(), "1"); + ObjectUtil.isNotEmpty(offDeviceDTO.getLedgerName()) ? + offDeviceDTO.getTagNumber().concat("|"). + concat(offDeviceDTO.getLedgerName()) : + offDeviceDTO.getPlace(), "1"); alarmRecordsList.add(alarmRecords); ledgers.add(offDeviceDTO); } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java new file mode 100644 index 0000000..cb554b9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.data.dto; + + +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class PanDataDTO implements Serializable { + + private static final long serialVersionUID = 1232822221212L; + + private String dataTime; + + private String attributeType; + + private String dataValue; + + private String deviceCode; + + + +} 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 index a082d00..2a943ad 100644 --- 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 @@ -23,6 +23,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -37,6 +38,7 @@ * @author zt * @since 2025-01-22 */ +@Slf4j @RequiredArgsConstructor @Service public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { @@ -71,8 +73,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -80,8 +81,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}",devCode, e); } } @@ -141,8 +141,7 @@ } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -222,8 +221,10 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); +// e.printStackTrace(); +// log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); + } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java index dd80611..cd24860 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java @@ -83,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -124,8 +123,7 @@ busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -200,8 +198,7 @@ alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } //低电量报警处理 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 302b446..f0def39 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 @@ -76,8 +76,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -85,8 +84,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -133,8 +131,7 @@ if (i < jsonArray.size() - 1) continue; busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -217,8 +214,7 @@ } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } 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 e5ba8f7..a02af88 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataMonitorPipeOtherServiceImpl extends ServiceImpl implements IDataMonitorPipeOtherService, IDataAbstractService { @@ -73,8 +75,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -116,8 +116,7 @@ //2.写入新的报警 alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + log.error("处理报警时发生异常,devcode:{},e:{}", devCode, e); } } } @@ -160,8 +159,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmEventCode)); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -341,8 +339,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag || ObjectUtil.isNotEmpty(alarmContent) ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java index 5dc8c2b..f383690 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java @@ -2,7 +2,6 @@ import cn.hutool.core.date.DateUtil; 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; @@ -13,15 +12,20 @@ import com.casic.missiles.modular.alarm.service.IAlarmRuleService; import com.casic.missiles.modular.data.dao.DataGasMapper; import com.casic.missiles.modular.data.dao.DataPanGasMapper; +import com.casic.missiles.modular.data.dto.PanDataDTO; import com.casic.missiles.modular.data.entity.DataPanGas; import com.casic.missiles.modular.data.service.IDataPanGasService; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.CommonUtil; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonToken; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.io.IOException; import java.util.Date; import java.util.List; import java.util.Map; @@ -68,78 +72,179 @@ } - @Transactional @Override public boolean processAcceptGasData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); - JSONArray jsonArray = jsonObject.getJSONArray("data"); - String devCode = ""; - for (int i = 0; i < jsonArray.size(); i++) { - try { - devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); - if (ObjectUtil.isEmpty(devCode)) continue; - List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); - String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); - String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); - //暂只存浓度 - if ("2".equals(attributeType)) continue; - String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); - gas = String.format("%.2f", Double.valueOf(gas)); - //1.存数据 - save(DataPanGas.builder() - .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") - .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") - .deviceCode(devCode) - .concentration(gas) - .logtime(DateUtil.parseDateTime(dataTime)) - .build());//存储采集数据 - //2.有无超限处理流程(判断最后一条数据) -// if (i < jsonArray.size() - 1) continue; - - //3.清除设备告警 - alarmRecordsService.cancelDeviceAlarm(devCode); - //4.存报警 - //若没绑场站,则不产生报警 - boolean alarmFlag = false; - String bfcf = busDeviceService.getBfcf(devCode); - 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))) { - dataTime = dataTime.replaceAll("-", ""); - dataTime = dataTime.replaceAll(":", ""); - dataTime = dataTime.replaceAll("\\s+", ""); - alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); - } - break; - } - } - } - //5.清数据报警 - if (!alarmFlag) { - alarmRecordsService.cancelDataAlarm(devCode); - } - //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); - //7.更新监测井状态 (1:正常,2:报警) - if (busWellDTOList != null && busWellDTOList.size() > 0) { - alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); - } - } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + JsonFactory factory = new JsonFactory(); + try (JsonParser parser = factory.createParser(jsonObject.getString("data"))) { + // 定位到 "data" 数组 + while (parser.nextToken() != JsonToken.START_ARRAY) { + parser.nextToken(); } + // 逐条处理数据 + while (parser.nextToken() != JsonToken.END_ARRAY) { + if (parser.getCurrentToken() == JsonToken.START_OBJECT) { + processSingleData(parseJsonObject(parser)); + } + + } + } catch (IOException e) { + e.printStackTrace(); } + return true; } + private PanDataDTO parseJsonObject(JsonParser parser) throws IOException { + PanDataDTO panDataDTO = new PanDataDTO(); + while (parser.nextToken() != JsonToken.END_OBJECT) { + String fieldName = parser.getCurrentName(); + if ("dataTime".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataTime(parser.getText()); + } else if ("attributeType".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setAttributeType(parser.getText()); + } else if ("dataValue".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataValue(parser.getText()); + } else if ("deviceCode".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDeviceCode(parser.getText()); + } + } + return panDataDTO; + } + + + private void processSingleData(PanDataDTO panDataDTO) { + try { + String devCode = panDataDTO.getDeviceCode(); + if (ObjectUtil.isEmpty(devCode)) return; + List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); + String gas = panDataDTO.getDataValue(); + String attributeType = panDataDTO.getAttributeType(); + //暂只存浓度 + if ("2".equals(attributeType)) return; + String dataTime = panDataDTO.getDataTime(); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataPanGas.builder() + .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .deviceCode(devCode) + .concentration(gas) + .logtime(DateUtil.parseDateTime(dataTime)) + .build());//存储采集数据 + + boolean alarmFlag = false; + String bfcf = busDeviceService.getBfcf(devCode); + 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))) { +// dataTime = dataTime.replaceAll("-", ""); +// dataTime = dataTime.replaceAll(":", ""); +// dataTime = dataTime.replaceAll("\\s+", ""); + alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); + //7.更新监测井状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + log.error("处理云台数据时发生异常,devcode:{},data:{},e:{}", panDataDTO.getDeviceCode(), panDataDTO.toString(), e); + } + } + + +// @Transactional +// @Override +// public boolean processAcceptGasData(Map dataParams) { +// JSONObject jsonObject = new JSONObject(dataParams); +// JSONArray jsonArray = jsonObject.getJSONArray("data"); +// String devCode = ""; +// for (int i = 0; i < jsonArray.size(); i++) { +// try { +// devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); +// if (ObjectUtil.isEmpty(devCode)) continue; +// List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); +// String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); +// String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); +// //暂只存浓度 +// if ("2".equals(attributeType)) continue; +// String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); +// gas = String.format("%.2f", Double.valueOf(gas)); +// //1.存数据 +// save(DataPanGas.builder() +// .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") +// .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") +// .deviceCode(devCode) +// .concentration(gas) +// .logtime(DateUtil.parseDateTime(dataTime)) +// .build());//存储采集数据 +// //2.有无超限处理流程(判断最后一条数据) +//// if (i < jsonArray.size() - 1) continue; +// +// //3.清除设备告警 +//// alarmRecordsService.cancelDeviceAlarm(devCode); +// //4.存报警 +// //若没绑场站,则不产生报警 +// boolean alarmFlag = false; +// String bfcf = busDeviceService.getBfcf(devCode); +// 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))) { +//// dataTime = dataTime.replaceAll("-", ""); +//// dataTime = dataTime.replaceAll(":", ""); +//// dataTime = dataTime.replaceAll("\\s+", ""); +// alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); +// } +// break; +// } +// } +// } +// //5.清数据报警 +// if (!alarmFlag) { +// alarmRecordsService.cancelDataAlarm(devCode); +// } +// //6.更新电量及状态 (1:正常,2:报警) +// alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); +// //7.更新监测井状态 (1:正常,2:报警) +// if (busWellDTOList != null && busWellDTOList.size() > 0) { +// alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); +// } +// } catch (Exception e) { +// log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); +// } +// } +// return true; +// } + @Override public boolean acceptAlarmData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); 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 37d731d..a17953b 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataTubeOtherServiceImpl extends ServiceImpl implements IDataTubeOtherService, IDataAbstractService { @@ -73,7 +75,7 @@ } } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,7 +84,7 @@ imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -122,8 +124,8 @@ } //特殊处理消警 if ("CancelWaterImmersionAlarm".equals(alarmType)) { - if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { - alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + if (alarmRecordsService.isWatchAlarms(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelWatchAlarms(devCode, "WaterImmersionAlarm"); } continue; } @@ -146,8 +148,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmType)); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -227,8 +228,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java new file mode 100644 index 0000000..3be65dd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java @@ -0,0 +1,170 @@ +package com.casic.missiles.modular.aop; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.aop.annotion.ReflectionUtils; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.modular.interfaces.log.LogManager; +import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.Serializable; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Aspect +@Component +public class OperateLogAspect { + private Logger log = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private ApplicationContext applicationContext; + + public static volatile Map oldMap = new HashMap<>(); + + public OperateLogAspect() { + } + + @Pointcut("@annotation(com.casic.missiles.modular.aop.annotion.OperateLog)") + public void cutService() { + } + + @Around("cutService()") + public Object recordSysLog(ProceedingJoinPoint point) throws Throwable { + Object result = point.proceed(); + + try { + this.handle(point); + } catch (Exception var4) { + this.log.error("日志记录出错!", var4); + } + + return result; + } + + /** + * 处理请求前执行 + */ + @Before(value = "@annotation(operateLog)") + public void boBefore(JoinPoint joinPoint, OperateLog operateLog) { + Object info = joinPoint.getArgs()[0]; + if ("edit".equals(operateLog.type()) && operateLog.needDefaultCompare()) { + Class cls = operateLog.serviceClass(); + IService service = (IService) applicationContext.getBean(cls); + Object result; + if (service instanceof IBusDeviceService) { + result = ((IBusDeviceService) service).getByDeviceId((Long) ReflectionUtils.getFieldValue(info, "id")); + } else + result = service.getById((Serializable) ReflectionUtils.getFieldValue(info, "id")); + oldMap = (Map) objectToMap(result); // 存储修改前的对象 + } + } + + private void handle(ProceedingJoinPoint point) throws Exception { + Signature sig = point.getSignature(); + MethodSignature msig = null; + if (!(sig instanceof MethodSignature)) { + throw new IllegalArgumentException("该注解只能用于方法"); + } else { + msig = (MethodSignature) sig; + Object target = point.getTarget(); + Method currentMethod = target.getClass().getMethod(msig.getName(), msig.getParameterTypes()); + String methodName = currentMethod.getName(); + AuthUser user = ShiroKit.getUser(); + if (null != user) { + String className = point.getTarget().getClass().getName(); + Object[] params = point.getArgs(); + OperateLog annotation = (OperateLog) currentMethod.getAnnotation(OperateLog.class); + String bussinessName = annotation.value(); + String key = annotation.key(); + Class dictClass = annotation.dict(); + String sb = argsArrayToString(params); + String msg = sb; + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + if ("add".equals(annotation.type())) { + Map parameters = (Map) objectToMap(params[0]); + msg = CollectionUtils.isEmpty(parameters) ? sb : ReflectionUtils.parseMutiKey(dictMap, key, parameters); + } else if ("edit".equals(annotation.type())) { + msg = CollectionUtils.isEmpty(oldMap) ? sb : ReflectionUtils.contrastObj(dictClass, key, params[0], oldMap); + }else if("delete".equals(annotation.type())){ + msg=dictMap.get(annotation.key())+":"+ReflectionUtils.getDeleteKeys(params[0]); + } + LogManager.me().executeLog(LogTaskFactory.bussinessLog(user.getId(), bussinessName, className, methodName, msg)); + } + } + } + + + /** + * 参数拼装 + */ + private String argsArrayToString(Object[] paramsArray) { + Gson gson = new GsonBuilder().create(); + String params = ""; + if (paramsArray != null && paramsArray.length > 0) { + for (int i = 0; i < paramsArray.length; i++) { + if (!isFilterObject(paramsArray[i])) { + params += gson.toJson(paramsArray[i]) + " & "; + } + } + } + return params.trim(); + } + + + /** + * 判断是否需要过滤的对象。 + * + * @param o 对象信息。 + * @return 如果是需要过滤的对象,则返回true;否则返回false。 + */ + public boolean isFilterObject(final Object o) { + return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse; + } + + private Map objectToMap(Object obj) { + if (obj == null) { + return null; + } + ObjectMapper mapper = new ObjectMapper(); + mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + // 如果使用JPA请自己打开这条配置 + // mapper.addMixIn(Object.class, IgnoreHibernatePropertiesInJackson.class); + Map mappedObject = mapper.convertValue(obj, Map.class); + return mappedObject; + + + } +} + + + 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 c8583d1..18b16e5 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 @@ -346,7 +346,7 @@ ay.ALARM_CATEGORY, ac.ALARM_LEVEL as alarmLevelName, bm.NAME AS manufactureName, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.CANCEL_TIME) as cancelDuration + TIMESTAMPDIFF(MINUTE, rd.TS, rd.CANCEL_TIME) as cancelDuration FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -377,11 +377,14 @@ lr.ledgerName, lr.DEPTID, lr.id as ledgerId, + lr.lngGaode, + lr.latGaode, + lr.type as watchObject, bd.INSTALL_DATE, ay.ALARM_CATEGORY, ac.ALARM_LEVEL as alarmLevelName, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.CANCEL_TIME) as cancelDuration, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.PROCESS_TIME) as processDuration, + TIMESTAMPDIFF(SECOND, rd.TS, rd.CANCEL_TIME) as cancelDuration, + TIMESTAMPDIFF(SECOND, rd.TS, rd.PROCESS_TIME) as processDuration, bm.`NAME` AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -541,15 +544,22 @@ - SELECT count(1) as sum,"1" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where `STATUS` ='1' - and ar.EXCEPTION_TYPE='0' + + WITH alarm_temp as (SELECT + ar.id, + ar.ts, + lr.DEPTID + FROM + `alarm_records` ar + LEFT JOIN bus_device bd ON ar.DEVCODE = bd.DEVCODE + AND bd.VALID > 0 + LEFT JOIN bus_device_ledger bl ON bd.ID = bl.DEVICE_ID + AND bl.VALID = '1' + JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID + AND lr.type = bl.type + AND lr.VALID = '1' + AND lr.ledgerCode = ar.LEDGER_CODE + WHERE + `STATUS` = '1' + AND ar.EXCEPTION_TYPE = '0'),alarms_temp as( + SELECT ar.id, ar.ts, bl.DEPTID FROM `alarm_records` ar join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.EXCEPTION_TYPE='0' + ) + SELECT count(1) as sum,"1" as type FROM alarm_temp ar + + + and ar.DEPTID in (${deptStrs}) + + + UNION ALL + SELECT count(1) as sum,"2" as type FROM alarms_temp ar where ar.TS>=CURDATE() + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"2" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>=CURDATE() - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"3" as type FROM alarms_temp ar where ar.TS>= CURDATE() - INTERVAL DAYOFWEEK(CURDATE()) - 2 DAY + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"3" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>= CURDATE() - INTERVAL DAYOFWEEK(CURDATE()) - 2 DAY - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"4" as type FROM alarms_temp ar where ar.TS>=DATE_FORMAT(NOW(),'%Y-%m-01') + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"4" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>=DATE_FORMAT(NOW(),'%Y-%m-01') - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"5" as type FROM alarms_temp ar where ar.TS>= DATE_FORMAT(CURDATE(), '%Y-01-01') + - and bl.DEPTID in (${deptStrs}) - - UNION ALL - SELECT count(1) as sum,"5" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>= DATE_FORMAT(CURDATE(), '%Y-01-01') - and ar.EXCEPTION_TYPE='0' - - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java index 3e0edd6..9dab3a7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java @@ -71,4 +71,18 @@ private Long deptid; + @ApiModelProperty("经度") + private String lngGaode; + + @ApiModelProperty("纬度") + private String latGaode; + + @ApiModelProperty("监测类型") + private String watchObject; + + @ApiModelProperty("点位id") + private Long ledgerId; + + + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java index e938da8..60464c4 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java @@ -12,6 +12,7 @@ private String deviceType; private String tagNumber; private String ledgerCode; + private String ledgerName; private String place; //台账类型 private String type; 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 ac4cabe..e623df7 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 @@ -44,6 +44,7 @@ import static cn.hutool.core.date.DateUnit.DAY; import static com.casic.missiles.util.TimeConvertUtil.TimeConverter; +import static com.casic.missiles.util.TimeConvertUtil.TimeConverterSecond; /** *

@@ -180,8 +181,8 @@ public DeviceAlarmDetailDTO deviceAlarmDetail(Long id) { DeviceAlarmDetailDTO alarmDetail = this.baseMapper.deviceAlarmDetail(id); - alarmDetail.setCancelDuration(TimeConverter(alarmDetail.getCancelDuration())); - alarmDetail.setProcessDuration(TimeConverter(alarmDetail.getProcessDuration())); + alarmDetail.setCancelDuration(TimeConverterSecond(alarmDetail.getCancelDuration())); + alarmDetail.setProcessDuration(TimeConverterSecond(alarmDetail.getProcessDuration())); alarmDetail.setDeptName(ObjectUtil.isNotEmpty(alarmDetail.getDeptid()) ? commonServer.getDeptNamesByDeptId(alarmDetail.getDeptid()) : ""); // alarmDetail.setAddress(alarmDetail.getTagNumber().concat("|").concat(alarmDetail.getLedgerName())); alarmDetail.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmDetail.getAlarmCategory())); @@ -524,16 +525,26 @@ @Override public void cancelDeviceAlarm(String devCode) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("DEVCODE", devCode); - updateWrapper.eq("EXCEPTION_TYPE", "1"); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE", devCode); + queryWrapper.eq("EXCEPTION_TYPE", "1"); //只有挂起和已处置的才消 // updateWrapper.ge("PROCESS_STATUS", "3"); - updateWrapper.eq("STATUS", "1"); - updateWrapper.set("STATUS", "0"); - updateWrapper.set("CANCEL_TIME", new Date()); - this.update(updateWrapper); - //toDo:需要加流程取消日志 + queryWrapper.eq("STATUS", "1"); + List alarmRecordsList = this.list(queryWrapper); + if (alarmRecordsList != null && alarmRecordsList.size() > 0) { + alarmRecordsList.forEach(alarmRecords -> { + alarmRecords.setStatus("0"); + alarmRecords.setCancelTime(new Date()); + alarmRecords.setPreProcessStatus(alarmRecords.getProcessStatus()); + alarmRecords.setProcessStatus(ApprovalStatusEnum.FINISHED.getCode()); + this.updateById(alarmRecords); + }); + //添加流程日志 + approvalLogMapper.insert(new ApprovalLog(alarmRecordsList.get(0).getId(), "1", + "", ApprovalStatusEnum.FINISHED.getCode(), + null)); + } } @Override @@ -674,8 +685,12 @@ AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), data.concat("%LEL"), data, - alarmRuleResponseDTO.getAlarmLevelId(),DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmLevelId(), DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmRuleResponseDTO.getAlarmTypeName(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -721,7 +736,7 @@ @Override - public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime,List busWellDTOList, + public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime, List busWellDTOList, Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { @@ -730,8 +745,12 @@ try { AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, - alarmLevelId, DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmLevelId, DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmTypeName, + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace() + , "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -793,7 +812,11 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.get().getAlarmTypeId(), alarmRuleResponseDTO.get().getAlarmTypeName(), alarmRuleResponseDTO.get().getAlarmLevelId(), DateUtil.parse(logTime), - alarmRuleResponseDTO.get().getAlarmThreshold(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "1"); + alarmRuleResponseDTO.get().getAlarmThreshold(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "1"); this.save(alarmRecords); } catch (Exception e) { e.printStackTrace(); @@ -846,8 +869,8 @@ * @param cell */ @Override - public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent,String logTime) { - this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent,DateUtil.parse(logTime)); + public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent, String logTime) { + this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent, DateUtil.parse(logTime)); } @Override @@ -903,7 +926,10 @@ offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), - offDeviceDTO.getPlace(), "1"); + ObjectUtil.isNotEmpty(offDeviceDTO.getLedgerName()) ? + offDeviceDTO.getTagNumber().concat("|"). + concat(offDeviceDTO.getLedgerName()) : + offDeviceDTO.getPlace(), "1"); alarmRecordsList.add(alarmRecords); ledgers.add(offDeviceDTO); } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java new file mode 100644 index 0000000..cb554b9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.data.dto; + + +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class PanDataDTO implements Serializable { + + private static final long serialVersionUID = 1232822221212L; + + private String dataTime; + + private String attributeType; + + private String dataValue; + + private String deviceCode; + + + +} 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 index a082d00..2a943ad 100644 --- 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 @@ -23,6 +23,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -37,6 +38,7 @@ * @author zt * @since 2025-01-22 */ +@Slf4j @RequiredArgsConstructor @Service public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { @@ -71,8 +73,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -80,8 +81,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}",devCode, e); } } @@ -141,8 +141,7 @@ } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -222,8 +221,10 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); +// e.printStackTrace(); +// log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); + } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java index dd80611..cd24860 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java @@ -83,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -124,8 +123,7 @@ busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -200,8 +198,7 @@ alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } //低电量报警处理 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 302b446..f0def39 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 @@ -76,8 +76,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -85,8 +84,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -133,8 +131,7 @@ if (i < jsonArray.size() - 1) continue; busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -217,8 +214,7 @@ } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } 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 e5ba8f7..a02af88 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataMonitorPipeOtherServiceImpl extends ServiceImpl implements IDataMonitorPipeOtherService, IDataAbstractService { @@ -73,8 +75,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -116,8 +116,7 @@ //2.写入新的报警 alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + log.error("处理报警时发生异常,devcode:{},e:{}", devCode, e); } } } @@ -160,8 +159,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmEventCode)); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -341,8 +339,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag || ObjectUtil.isNotEmpty(alarmContent) ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java index 5dc8c2b..f383690 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java @@ -2,7 +2,6 @@ import cn.hutool.core.date.DateUtil; 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; @@ -13,15 +12,20 @@ import com.casic.missiles.modular.alarm.service.IAlarmRuleService; import com.casic.missiles.modular.data.dao.DataGasMapper; import com.casic.missiles.modular.data.dao.DataPanGasMapper; +import com.casic.missiles.modular.data.dto.PanDataDTO; import com.casic.missiles.modular.data.entity.DataPanGas; import com.casic.missiles.modular.data.service.IDataPanGasService; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.CommonUtil; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonToken; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.io.IOException; import java.util.Date; import java.util.List; import java.util.Map; @@ -68,78 +72,179 @@ } - @Transactional @Override public boolean processAcceptGasData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); - JSONArray jsonArray = jsonObject.getJSONArray("data"); - String devCode = ""; - for (int i = 0; i < jsonArray.size(); i++) { - try { - devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); - if (ObjectUtil.isEmpty(devCode)) continue; - List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); - String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); - String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); - //暂只存浓度 - if ("2".equals(attributeType)) continue; - String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); - gas = String.format("%.2f", Double.valueOf(gas)); - //1.存数据 - save(DataPanGas.builder() - .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") - .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") - .deviceCode(devCode) - .concentration(gas) - .logtime(DateUtil.parseDateTime(dataTime)) - .build());//存储采集数据 - //2.有无超限处理流程(判断最后一条数据) -// if (i < jsonArray.size() - 1) continue; - - //3.清除设备告警 - alarmRecordsService.cancelDeviceAlarm(devCode); - //4.存报警 - //若没绑场站,则不产生报警 - boolean alarmFlag = false; - String bfcf = busDeviceService.getBfcf(devCode); - 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))) { - dataTime = dataTime.replaceAll("-", ""); - dataTime = dataTime.replaceAll(":", ""); - dataTime = dataTime.replaceAll("\\s+", ""); - alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); - } - break; - } - } - } - //5.清数据报警 - if (!alarmFlag) { - alarmRecordsService.cancelDataAlarm(devCode); - } - //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); - //7.更新监测井状态 (1:正常,2:报警) - if (busWellDTOList != null && busWellDTOList.size() > 0) { - alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); - } - } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + JsonFactory factory = new JsonFactory(); + try (JsonParser parser = factory.createParser(jsonObject.getString("data"))) { + // 定位到 "data" 数组 + while (parser.nextToken() != JsonToken.START_ARRAY) { + parser.nextToken(); } + // 逐条处理数据 + while (parser.nextToken() != JsonToken.END_ARRAY) { + if (parser.getCurrentToken() == JsonToken.START_OBJECT) { + processSingleData(parseJsonObject(parser)); + } + + } + } catch (IOException e) { + e.printStackTrace(); } + return true; } + private PanDataDTO parseJsonObject(JsonParser parser) throws IOException { + PanDataDTO panDataDTO = new PanDataDTO(); + while (parser.nextToken() != JsonToken.END_OBJECT) { + String fieldName = parser.getCurrentName(); + if ("dataTime".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataTime(parser.getText()); + } else if ("attributeType".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setAttributeType(parser.getText()); + } else if ("dataValue".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataValue(parser.getText()); + } else if ("deviceCode".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDeviceCode(parser.getText()); + } + } + return panDataDTO; + } + + + private void processSingleData(PanDataDTO panDataDTO) { + try { + String devCode = panDataDTO.getDeviceCode(); + if (ObjectUtil.isEmpty(devCode)) return; + List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); + String gas = panDataDTO.getDataValue(); + String attributeType = panDataDTO.getAttributeType(); + //暂只存浓度 + if ("2".equals(attributeType)) return; + String dataTime = panDataDTO.getDataTime(); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataPanGas.builder() + .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .deviceCode(devCode) + .concentration(gas) + .logtime(DateUtil.parseDateTime(dataTime)) + .build());//存储采集数据 + + boolean alarmFlag = false; + String bfcf = busDeviceService.getBfcf(devCode); + 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))) { +// dataTime = dataTime.replaceAll("-", ""); +// dataTime = dataTime.replaceAll(":", ""); +// dataTime = dataTime.replaceAll("\\s+", ""); + alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); + //7.更新监测井状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + log.error("处理云台数据时发生异常,devcode:{},data:{},e:{}", panDataDTO.getDeviceCode(), panDataDTO.toString(), e); + } + } + + +// @Transactional +// @Override +// public boolean processAcceptGasData(Map dataParams) { +// JSONObject jsonObject = new JSONObject(dataParams); +// JSONArray jsonArray = jsonObject.getJSONArray("data"); +// String devCode = ""; +// for (int i = 0; i < jsonArray.size(); i++) { +// try { +// devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); +// if (ObjectUtil.isEmpty(devCode)) continue; +// List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); +// String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); +// String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); +// //暂只存浓度 +// if ("2".equals(attributeType)) continue; +// String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); +// gas = String.format("%.2f", Double.valueOf(gas)); +// //1.存数据 +// save(DataPanGas.builder() +// .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") +// .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") +// .deviceCode(devCode) +// .concentration(gas) +// .logtime(DateUtil.parseDateTime(dataTime)) +// .build());//存储采集数据 +// //2.有无超限处理流程(判断最后一条数据) +//// if (i < jsonArray.size() - 1) continue; +// +// //3.清除设备告警 +//// alarmRecordsService.cancelDeviceAlarm(devCode); +// //4.存报警 +// //若没绑场站,则不产生报警 +// boolean alarmFlag = false; +// String bfcf = busDeviceService.getBfcf(devCode); +// 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))) { +//// dataTime = dataTime.replaceAll("-", ""); +//// dataTime = dataTime.replaceAll(":", ""); +//// dataTime = dataTime.replaceAll("\\s+", ""); +// alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); +// } +// break; +// } +// } +// } +// //5.清数据报警 +// if (!alarmFlag) { +// alarmRecordsService.cancelDataAlarm(devCode); +// } +// //6.更新电量及状态 (1:正常,2:报警) +// alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); +// //7.更新监测井状态 (1:正常,2:报警) +// if (busWellDTOList != null && busWellDTOList.size() > 0) { +// alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); +// } +// } catch (Exception e) { +// log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); +// } +// } +// return true; +// } + @Override public boolean acceptAlarmData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); 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 37d731d..a17953b 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataTubeOtherServiceImpl extends ServiceImpl implements IDataTubeOtherService, IDataAbstractService { @@ -73,7 +75,7 @@ } } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,7 +84,7 @@ imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -122,8 +124,8 @@ } //特殊处理消警 if ("CancelWaterImmersionAlarm".equals(alarmType)) { - if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { - alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + if (alarmRecordsService.isWatchAlarms(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelWatchAlarms(devCode, "WaterImmersionAlarm"); } continue; } @@ -146,8 +148,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmType)); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -227,8 +228,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java new file mode 100644 index 0000000..3be65dd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java @@ -0,0 +1,170 @@ +package com.casic.missiles.modular.aop; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.aop.annotion.ReflectionUtils; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.modular.interfaces.log.LogManager; +import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.Serializable; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Aspect +@Component +public class OperateLogAspect { + private Logger log = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private ApplicationContext applicationContext; + + public static volatile Map oldMap = new HashMap<>(); + + public OperateLogAspect() { + } + + @Pointcut("@annotation(com.casic.missiles.modular.aop.annotion.OperateLog)") + public void cutService() { + } + + @Around("cutService()") + public Object recordSysLog(ProceedingJoinPoint point) throws Throwable { + Object result = point.proceed(); + + try { + this.handle(point); + } catch (Exception var4) { + this.log.error("日志记录出错!", var4); + } + + return result; + } + + /** + * 处理请求前执行 + */ + @Before(value = "@annotation(operateLog)") + public void boBefore(JoinPoint joinPoint, OperateLog operateLog) { + Object info = joinPoint.getArgs()[0]; + if ("edit".equals(operateLog.type()) && operateLog.needDefaultCompare()) { + Class cls = operateLog.serviceClass(); + IService service = (IService) applicationContext.getBean(cls); + Object result; + if (service instanceof IBusDeviceService) { + result = ((IBusDeviceService) service).getByDeviceId((Long) ReflectionUtils.getFieldValue(info, "id")); + } else + result = service.getById((Serializable) ReflectionUtils.getFieldValue(info, "id")); + oldMap = (Map) objectToMap(result); // 存储修改前的对象 + } + } + + private void handle(ProceedingJoinPoint point) throws Exception { + Signature sig = point.getSignature(); + MethodSignature msig = null; + if (!(sig instanceof MethodSignature)) { + throw new IllegalArgumentException("该注解只能用于方法"); + } else { + msig = (MethodSignature) sig; + Object target = point.getTarget(); + Method currentMethod = target.getClass().getMethod(msig.getName(), msig.getParameterTypes()); + String methodName = currentMethod.getName(); + AuthUser user = ShiroKit.getUser(); + if (null != user) { + String className = point.getTarget().getClass().getName(); + Object[] params = point.getArgs(); + OperateLog annotation = (OperateLog) currentMethod.getAnnotation(OperateLog.class); + String bussinessName = annotation.value(); + String key = annotation.key(); + Class dictClass = annotation.dict(); + String sb = argsArrayToString(params); + String msg = sb; + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + if ("add".equals(annotation.type())) { + Map parameters = (Map) objectToMap(params[0]); + msg = CollectionUtils.isEmpty(parameters) ? sb : ReflectionUtils.parseMutiKey(dictMap, key, parameters); + } else if ("edit".equals(annotation.type())) { + msg = CollectionUtils.isEmpty(oldMap) ? sb : ReflectionUtils.contrastObj(dictClass, key, params[0], oldMap); + }else if("delete".equals(annotation.type())){ + msg=dictMap.get(annotation.key())+":"+ReflectionUtils.getDeleteKeys(params[0]); + } + LogManager.me().executeLog(LogTaskFactory.bussinessLog(user.getId(), bussinessName, className, methodName, msg)); + } + } + } + + + /** + * 参数拼装 + */ + private String argsArrayToString(Object[] paramsArray) { + Gson gson = new GsonBuilder().create(); + String params = ""; + if (paramsArray != null && paramsArray.length > 0) { + for (int i = 0; i < paramsArray.length; i++) { + if (!isFilterObject(paramsArray[i])) { + params += gson.toJson(paramsArray[i]) + " & "; + } + } + } + return params.trim(); + } + + + /** + * 判断是否需要过滤的对象。 + * + * @param o 对象信息。 + * @return 如果是需要过滤的对象,则返回true;否则返回false。 + */ + public boolean isFilterObject(final Object o) { + return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse; + } + + private Map objectToMap(Object obj) { + if (obj == null) { + return null; + } + ObjectMapper mapper = new ObjectMapper(); + mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + // 如果使用JPA请自己打开这条配置 + // mapper.addMixIn(Object.class, IgnoreHibernatePropertiesInJackson.class); + Map mappedObject = mapper.convertValue(obj, Map.class); + return mappedObject; + + + } +} + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java new file mode 100644 index 0000000..77afa9c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.aop.annotion; + +import java.lang.annotation.*; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.FIELD}) +@Documented +public @interface DataName { + String name() default ""; // 字段名称 + + /** + * 读取枚举内容转义表达式 (如: 0=男,1=女,2=未知) + */ + String readConverterExp() default ""; +} + + 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 c8583d1..18b16e5 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 @@ -346,7 +346,7 @@ ay.ALARM_CATEGORY, ac.ALARM_LEVEL as alarmLevelName, bm.NAME AS manufactureName, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.CANCEL_TIME) as cancelDuration + TIMESTAMPDIFF(MINUTE, rd.TS, rd.CANCEL_TIME) as cancelDuration FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -377,11 +377,14 @@ lr.ledgerName, lr.DEPTID, lr.id as ledgerId, + lr.lngGaode, + lr.latGaode, + lr.type as watchObject, bd.INSTALL_DATE, ay.ALARM_CATEGORY, ac.ALARM_LEVEL as alarmLevelName, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.CANCEL_TIME) as cancelDuration, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.PROCESS_TIME) as processDuration, + TIMESTAMPDIFF(SECOND, rd.TS, rd.CANCEL_TIME) as cancelDuration, + TIMESTAMPDIFF(SECOND, rd.TS, rd.PROCESS_TIME) as processDuration, bm.`NAME` AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -541,15 +544,22 @@ - SELECT count(1) as sum,"1" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where `STATUS` ='1' - and ar.EXCEPTION_TYPE='0' + + WITH alarm_temp as (SELECT + ar.id, + ar.ts, + lr.DEPTID + FROM + `alarm_records` ar + LEFT JOIN bus_device bd ON ar.DEVCODE = bd.DEVCODE + AND bd.VALID > 0 + LEFT JOIN bus_device_ledger bl ON bd.ID = bl.DEVICE_ID + AND bl.VALID = '1' + JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID + AND lr.type = bl.type + AND lr.VALID = '1' + AND lr.ledgerCode = ar.LEDGER_CODE + WHERE + `STATUS` = '1' + AND ar.EXCEPTION_TYPE = '0'),alarms_temp as( + SELECT ar.id, ar.ts, bl.DEPTID FROM `alarm_records` ar join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.EXCEPTION_TYPE='0' + ) + SELECT count(1) as sum,"1" as type FROM alarm_temp ar + + + and ar.DEPTID in (${deptStrs}) + + + UNION ALL + SELECT count(1) as sum,"2" as type FROM alarms_temp ar where ar.TS>=CURDATE() + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"2" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>=CURDATE() - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"3" as type FROM alarms_temp ar where ar.TS>= CURDATE() - INTERVAL DAYOFWEEK(CURDATE()) - 2 DAY + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"3" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>= CURDATE() - INTERVAL DAYOFWEEK(CURDATE()) - 2 DAY - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"4" as type FROM alarms_temp ar where ar.TS>=DATE_FORMAT(NOW(),'%Y-%m-01') + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"4" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>=DATE_FORMAT(NOW(),'%Y-%m-01') - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"5" as type FROM alarms_temp ar where ar.TS>= DATE_FORMAT(CURDATE(), '%Y-01-01') + - and bl.DEPTID in (${deptStrs}) - - UNION ALL - SELECT count(1) as sum,"5" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>= DATE_FORMAT(CURDATE(), '%Y-01-01') - and ar.EXCEPTION_TYPE='0' - - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java index 3e0edd6..9dab3a7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java @@ -71,4 +71,18 @@ private Long deptid; + @ApiModelProperty("经度") + private String lngGaode; + + @ApiModelProperty("纬度") + private String latGaode; + + @ApiModelProperty("监测类型") + private String watchObject; + + @ApiModelProperty("点位id") + private Long ledgerId; + + + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java index e938da8..60464c4 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java @@ -12,6 +12,7 @@ private String deviceType; private String tagNumber; private String ledgerCode; + private String ledgerName; private String place; //台账类型 private String type; 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 ac4cabe..e623df7 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 @@ -44,6 +44,7 @@ import static cn.hutool.core.date.DateUnit.DAY; import static com.casic.missiles.util.TimeConvertUtil.TimeConverter; +import static com.casic.missiles.util.TimeConvertUtil.TimeConverterSecond; /** *

@@ -180,8 +181,8 @@ public DeviceAlarmDetailDTO deviceAlarmDetail(Long id) { DeviceAlarmDetailDTO alarmDetail = this.baseMapper.deviceAlarmDetail(id); - alarmDetail.setCancelDuration(TimeConverter(alarmDetail.getCancelDuration())); - alarmDetail.setProcessDuration(TimeConverter(alarmDetail.getProcessDuration())); + alarmDetail.setCancelDuration(TimeConverterSecond(alarmDetail.getCancelDuration())); + alarmDetail.setProcessDuration(TimeConverterSecond(alarmDetail.getProcessDuration())); alarmDetail.setDeptName(ObjectUtil.isNotEmpty(alarmDetail.getDeptid()) ? commonServer.getDeptNamesByDeptId(alarmDetail.getDeptid()) : ""); // alarmDetail.setAddress(alarmDetail.getTagNumber().concat("|").concat(alarmDetail.getLedgerName())); alarmDetail.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmDetail.getAlarmCategory())); @@ -524,16 +525,26 @@ @Override public void cancelDeviceAlarm(String devCode) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("DEVCODE", devCode); - updateWrapper.eq("EXCEPTION_TYPE", "1"); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE", devCode); + queryWrapper.eq("EXCEPTION_TYPE", "1"); //只有挂起和已处置的才消 // updateWrapper.ge("PROCESS_STATUS", "3"); - updateWrapper.eq("STATUS", "1"); - updateWrapper.set("STATUS", "0"); - updateWrapper.set("CANCEL_TIME", new Date()); - this.update(updateWrapper); - //toDo:需要加流程取消日志 + queryWrapper.eq("STATUS", "1"); + List alarmRecordsList = this.list(queryWrapper); + if (alarmRecordsList != null && alarmRecordsList.size() > 0) { + alarmRecordsList.forEach(alarmRecords -> { + alarmRecords.setStatus("0"); + alarmRecords.setCancelTime(new Date()); + alarmRecords.setPreProcessStatus(alarmRecords.getProcessStatus()); + alarmRecords.setProcessStatus(ApprovalStatusEnum.FINISHED.getCode()); + this.updateById(alarmRecords); + }); + //添加流程日志 + approvalLogMapper.insert(new ApprovalLog(alarmRecordsList.get(0).getId(), "1", + "", ApprovalStatusEnum.FINISHED.getCode(), + null)); + } } @Override @@ -674,8 +685,12 @@ AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), data.concat("%LEL"), data, - alarmRuleResponseDTO.getAlarmLevelId(),DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmLevelId(), DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmRuleResponseDTO.getAlarmTypeName(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -721,7 +736,7 @@ @Override - public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime,List busWellDTOList, + public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime, List busWellDTOList, Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { @@ -730,8 +745,12 @@ try { AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, - alarmLevelId, DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmLevelId, DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmTypeName, + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace() + , "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -793,7 +812,11 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.get().getAlarmTypeId(), alarmRuleResponseDTO.get().getAlarmTypeName(), alarmRuleResponseDTO.get().getAlarmLevelId(), DateUtil.parse(logTime), - alarmRuleResponseDTO.get().getAlarmThreshold(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "1"); + alarmRuleResponseDTO.get().getAlarmThreshold(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "1"); this.save(alarmRecords); } catch (Exception e) { e.printStackTrace(); @@ -846,8 +869,8 @@ * @param cell */ @Override - public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent,String logTime) { - this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent,DateUtil.parse(logTime)); + public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent, String logTime) { + this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent, DateUtil.parse(logTime)); } @Override @@ -903,7 +926,10 @@ offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), - offDeviceDTO.getPlace(), "1"); + ObjectUtil.isNotEmpty(offDeviceDTO.getLedgerName()) ? + offDeviceDTO.getTagNumber().concat("|"). + concat(offDeviceDTO.getLedgerName()) : + offDeviceDTO.getPlace(), "1"); alarmRecordsList.add(alarmRecords); ledgers.add(offDeviceDTO); } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java new file mode 100644 index 0000000..cb554b9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.data.dto; + + +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class PanDataDTO implements Serializable { + + private static final long serialVersionUID = 1232822221212L; + + private String dataTime; + + private String attributeType; + + private String dataValue; + + private String deviceCode; + + + +} 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 index a082d00..2a943ad 100644 --- 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 @@ -23,6 +23,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -37,6 +38,7 @@ * @author zt * @since 2025-01-22 */ +@Slf4j @RequiredArgsConstructor @Service public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { @@ -71,8 +73,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -80,8 +81,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}",devCode, e); } } @@ -141,8 +141,7 @@ } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -222,8 +221,10 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); +// e.printStackTrace(); +// log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); + } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java index dd80611..cd24860 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java @@ -83,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -124,8 +123,7 @@ busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -200,8 +198,7 @@ alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } //低电量报警处理 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 302b446..f0def39 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 @@ -76,8 +76,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -85,8 +84,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -133,8 +131,7 @@ if (i < jsonArray.size() - 1) continue; busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -217,8 +214,7 @@ } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } 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 e5ba8f7..a02af88 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataMonitorPipeOtherServiceImpl extends ServiceImpl implements IDataMonitorPipeOtherService, IDataAbstractService { @@ -73,8 +75,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -116,8 +116,7 @@ //2.写入新的报警 alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + log.error("处理报警时发生异常,devcode:{},e:{}", devCode, e); } } } @@ -160,8 +159,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmEventCode)); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -341,8 +339,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag || ObjectUtil.isNotEmpty(alarmContent) ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java index 5dc8c2b..f383690 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java @@ -2,7 +2,6 @@ import cn.hutool.core.date.DateUtil; 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; @@ -13,15 +12,20 @@ import com.casic.missiles.modular.alarm.service.IAlarmRuleService; import com.casic.missiles.modular.data.dao.DataGasMapper; import com.casic.missiles.modular.data.dao.DataPanGasMapper; +import com.casic.missiles.modular.data.dto.PanDataDTO; import com.casic.missiles.modular.data.entity.DataPanGas; import com.casic.missiles.modular.data.service.IDataPanGasService; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.CommonUtil; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonToken; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.io.IOException; import java.util.Date; import java.util.List; import java.util.Map; @@ -68,78 +72,179 @@ } - @Transactional @Override public boolean processAcceptGasData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); - JSONArray jsonArray = jsonObject.getJSONArray("data"); - String devCode = ""; - for (int i = 0; i < jsonArray.size(); i++) { - try { - devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); - if (ObjectUtil.isEmpty(devCode)) continue; - List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); - String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); - String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); - //暂只存浓度 - if ("2".equals(attributeType)) continue; - String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); - gas = String.format("%.2f", Double.valueOf(gas)); - //1.存数据 - save(DataPanGas.builder() - .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") - .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") - .deviceCode(devCode) - .concentration(gas) - .logtime(DateUtil.parseDateTime(dataTime)) - .build());//存储采集数据 - //2.有无超限处理流程(判断最后一条数据) -// if (i < jsonArray.size() - 1) continue; - - //3.清除设备告警 - alarmRecordsService.cancelDeviceAlarm(devCode); - //4.存报警 - //若没绑场站,则不产生报警 - boolean alarmFlag = false; - String bfcf = busDeviceService.getBfcf(devCode); - 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))) { - dataTime = dataTime.replaceAll("-", ""); - dataTime = dataTime.replaceAll(":", ""); - dataTime = dataTime.replaceAll("\\s+", ""); - alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); - } - break; - } - } - } - //5.清数据报警 - if (!alarmFlag) { - alarmRecordsService.cancelDataAlarm(devCode); - } - //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); - //7.更新监测井状态 (1:正常,2:报警) - if (busWellDTOList != null && busWellDTOList.size() > 0) { - alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); - } - } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + JsonFactory factory = new JsonFactory(); + try (JsonParser parser = factory.createParser(jsonObject.getString("data"))) { + // 定位到 "data" 数组 + while (parser.nextToken() != JsonToken.START_ARRAY) { + parser.nextToken(); } + // 逐条处理数据 + while (parser.nextToken() != JsonToken.END_ARRAY) { + if (parser.getCurrentToken() == JsonToken.START_OBJECT) { + processSingleData(parseJsonObject(parser)); + } + + } + } catch (IOException e) { + e.printStackTrace(); } + return true; } + private PanDataDTO parseJsonObject(JsonParser parser) throws IOException { + PanDataDTO panDataDTO = new PanDataDTO(); + while (parser.nextToken() != JsonToken.END_OBJECT) { + String fieldName = parser.getCurrentName(); + if ("dataTime".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataTime(parser.getText()); + } else if ("attributeType".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setAttributeType(parser.getText()); + } else if ("dataValue".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataValue(parser.getText()); + } else if ("deviceCode".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDeviceCode(parser.getText()); + } + } + return panDataDTO; + } + + + private void processSingleData(PanDataDTO panDataDTO) { + try { + String devCode = panDataDTO.getDeviceCode(); + if (ObjectUtil.isEmpty(devCode)) return; + List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); + String gas = panDataDTO.getDataValue(); + String attributeType = panDataDTO.getAttributeType(); + //暂只存浓度 + if ("2".equals(attributeType)) return; + String dataTime = panDataDTO.getDataTime(); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataPanGas.builder() + .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .deviceCode(devCode) + .concentration(gas) + .logtime(DateUtil.parseDateTime(dataTime)) + .build());//存储采集数据 + + boolean alarmFlag = false; + String bfcf = busDeviceService.getBfcf(devCode); + 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))) { +// dataTime = dataTime.replaceAll("-", ""); +// dataTime = dataTime.replaceAll(":", ""); +// dataTime = dataTime.replaceAll("\\s+", ""); + alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); + //7.更新监测井状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + log.error("处理云台数据时发生异常,devcode:{},data:{},e:{}", panDataDTO.getDeviceCode(), panDataDTO.toString(), e); + } + } + + +// @Transactional +// @Override +// public boolean processAcceptGasData(Map dataParams) { +// JSONObject jsonObject = new JSONObject(dataParams); +// JSONArray jsonArray = jsonObject.getJSONArray("data"); +// String devCode = ""; +// for (int i = 0; i < jsonArray.size(); i++) { +// try { +// devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); +// if (ObjectUtil.isEmpty(devCode)) continue; +// List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); +// String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); +// String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); +// //暂只存浓度 +// if ("2".equals(attributeType)) continue; +// String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); +// gas = String.format("%.2f", Double.valueOf(gas)); +// //1.存数据 +// save(DataPanGas.builder() +// .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") +// .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") +// .deviceCode(devCode) +// .concentration(gas) +// .logtime(DateUtil.parseDateTime(dataTime)) +// .build());//存储采集数据 +// //2.有无超限处理流程(判断最后一条数据) +//// if (i < jsonArray.size() - 1) continue; +// +// //3.清除设备告警 +//// alarmRecordsService.cancelDeviceAlarm(devCode); +// //4.存报警 +// //若没绑场站,则不产生报警 +// boolean alarmFlag = false; +// String bfcf = busDeviceService.getBfcf(devCode); +// 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))) { +//// dataTime = dataTime.replaceAll("-", ""); +//// dataTime = dataTime.replaceAll(":", ""); +//// dataTime = dataTime.replaceAll("\\s+", ""); +// alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); +// } +// break; +// } +// } +// } +// //5.清数据报警 +// if (!alarmFlag) { +// alarmRecordsService.cancelDataAlarm(devCode); +// } +// //6.更新电量及状态 (1:正常,2:报警) +// alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); +// //7.更新监测井状态 (1:正常,2:报警) +// if (busWellDTOList != null && busWellDTOList.size() > 0) { +// alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); +// } +// } catch (Exception e) { +// log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); +// } +// } +// return true; +// } + @Override public boolean acceptAlarmData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); 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 37d731d..a17953b 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataTubeOtherServiceImpl extends ServiceImpl implements IDataTubeOtherService, IDataAbstractService { @@ -73,7 +75,7 @@ } } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,7 +84,7 @@ imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -122,8 +124,8 @@ } //特殊处理消警 if ("CancelWaterImmersionAlarm".equals(alarmType)) { - if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { - alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + if (alarmRecordsService.isWatchAlarms(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelWatchAlarms(devCode, "WaterImmersionAlarm"); } continue; } @@ -146,8 +148,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmType)); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -227,8 +228,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java new file mode 100644 index 0000000..3be65dd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java @@ -0,0 +1,170 @@ +package com.casic.missiles.modular.aop; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.aop.annotion.ReflectionUtils; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.modular.interfaces.log.LogManager; +import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.Serializable; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Aspect +@Component +public class OperateLogAspect { + private Logger log = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private ApplicationContext applicationContext; + + public static volatile Map oldMap = new HashMap<>(); + + public OperateLogAspect() { + } + + @Pointcut("@annotation(com.casic.missiles.modular.aop.annotion.OperateLog)") + public void cutService() { + } + + @Around("cutService()") + public Object recordSysLog(ProceedingJoinPoint point) throws Throwable { + Object result = point.proceed(); + + try { + this.handle(point); + } catch (Exception var4) { + this.log.error("日志记录出错!", var4); + } + + return result; + } + + /** + * 处理请求前执行 + */ + @Before(value = "@annotation(operateLog)") + public void boBefore(JoinPoint joinPoint, OperateLog operateLog) { + Object info = joinPoint.getArgs()[0]; + if ("edit".equals(operateLog.type()) && operateLog.needDefaultCompare()) { + Class cls = operateLog.serviceClass(); + IService service = (IService) applicationContext.getBean(cls); + Object result; + if (service instanceof IBusDeviceService) { + result = ((IBusDeviceService) service).getByDeviceId((Long) ReflectionUtils.getFieldValue(info, "id")); + } else + result = service.getById((Serializable) ReflectionUtils.getFieldValue(info, "id")); + oldMap = (Map) objectToMap(result); // 存储修改前的对象 + } + } + + private void handle(ProceedingJoinPoint point) throws Exception { + Signature sig = point.getSignature(); + MethodSignature msig = null; + if (!(sig instanceof MethodSignature)) { + throw new IllegalArgumentException("该注解只能用于方法"); + } else { + msig = (MethodSignature) sig; + Object target = point.getTarget(); + Method currentMethod = target.getClass().getMethod(msig.getName(), msig.getParameterTypes()); + String methodName = currentMethod.getName(); + AuthUser user = ShiroKit.getUser(); + if (null != user) { + String className = point.getTarget().getClass().getName(); + Object[] params = point.getArgs(); + OperateLog annotation = (OperateLog) currentMethod.getAnnotation(OperateLog.class); + String bussinessName = annotation.value(); + String key = annotation.key(); + Class dictClass = annotation.dict(); + String sb = argsArrayToString(params); + String msg = sb; + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + if ("add".equals(annotation.type())) { + Map parameters = (Map) objectToMap(params[0]); + msg = CollectionUtils.isEmpty(parameters) ? sb : ReflectionUtils.parseMutiKey(dictMap, key, parameters); + } else if ("edit".equals(annotation.type())) { + msg = CollectionUtils.isEmpty(oldMap) ? sb : ReflectionUtils.contrastObj(dictClass, key, params[0], oldMap); + }else if("delete".equals(annotation.type())){ + msg=dictMap.get(annotation.key())+":"+ReflectionUtils.getDeleteKeys(params[0]); + } + LogManager.me().executeLog(LogTaskFactory.bussinessLog(user.getId(), bussinessName, className, methodName, msg)); + } + } + } + + + /** + * 参数拼装 + */ + private String argsArrayToString(Object[] paramsArray) { + Gson gson = new GsonBuilder().create(); + String params = ""; + if (paramsArray != null && paramsArray.length > 0) { + for (int i = 0; i < paramsArray.length; i++) { + if (!isFilterObject(paramsArray[i])) { + params += gson.toJson(paramsArray[i]) + " & "; + } + } + } + return params.trim(); + } + + + /** + * 判断是否需要过滤的对象。 + * + * @param o 对象信息。 + * @return 如果是需要过滤的对象,则返回true;否则返回false。 + */ + public boolean isFilterObject(final Object o) { + return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse; + } + + private Map objectToMap(Object obj) { + if (obj == null) { + return null; + } + ObjectMapper mapper = new ObjectMapper(); + mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + // 如果使用JPA请自己打开这条配置 + // mapper.addMixIn(Object.class, IgnoreHibernatePropertiesInJackson.class); + Map mappedObject = mapper.convertValue(obj, Map.class); + return mappedObject; + + + } +} + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java new file mode 100644 index 0000000..77afa9c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.aop.annotion; + +import java.lang.annotation.*; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.FIELD}) +@Documented +public @interface DataName { + String name() default ""; // 字段名称 + + /** + * 读取枚举内容转义表达式 (如: 0=男,1=女,2=未知) + */ + String readConverterExp() default ""; +} + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java new file mode 100644 index 0000000..f1f59ad --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.aop.annotion; + + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.common.constant.dictmap.base.SystemDict; + +import java.lang.annotation.*; + +@Inherited +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.METHOD}) +public @interface OperateLog { + String value() default ""; + + String key() default "id"; + + Class serviceClass() default IService.class; + + // 是否需要比较新旧数据 + boolean needDefaultCompare() default true; + + //操作类型 add update delete + String type() default "update"; + + Class dict() default SystemDict.class; +} 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 c8583d1..18b16e5 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 @@ -346,7 +346,7 @@ ay.ALARM_CATEGORY, ac.ALARM_LEVEL as alarmLevelName, bm.NAME AS manufactureName, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.CANCEL_TIME) as cancelDuration + TIMESTAMPDIFF(MINUTE, rd.TS, rd.CANCEL_TIME) as cancelDuration FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -377,11 +377,14 @@ lr.ledgerName, lr.DEPTID, lr.id as ledgerId, + lr.lngGaode, + lr.latGaode, + lr.type as watchObject, bd.INSTALL_DATE, ay.ALARM_CATEGORY, ac.ALARM_LEVEL as alarmLevelName, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.CANCEL_TIME) as cancelDuration, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.PROCESS_TIME) as processDuration, + TIMESTAMPDIFF(SECOND, rd.TS, rd.CANCEL_TIME) as cancelDuration, + TIMESTAMPDIFF(SECOND, rd.TS, rd.PROCESS_TIME) as processDuration, bm.`NAME` AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -541,15 +544,22 @@ - SELECT count(1) as sum,"1" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where `STATUS` ='1' - and ar.EXCEPTION_TYPE='0' + + WITH alarm_temp as (SELECT + ar.id, + ar.ts, + lr.DEPTID + FROM + `alarm_records` ar + LEFT JOIN bus_device bd ON ar.DEVCODE = bd.DEVCODE + AND bd.VALID > 0 + LEFT JOIN bus_device_ledger bl ON bd.ID = bl.DEVICE_ID + AND bl.VALID = '1' + JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID + AND lr.type = bl.type + AND lr.VALID = '1' + AND lr.ledgerCode = ar.LEDGER_CODE + WHERE + `STATUS` = '1' + AND ar.EXCEPTION_TYPE = '0'),alarms_temp as( + SELECT ar.id, ar.ts, bl.DEPTID FROM `alarm_records` ar join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.EXCEPTION_TYPE='0' + ) + SELECT count(1) as sum,"1" as type FROM alarm_temp ar + + + and ar.DEPTID in (${deptStrs}) + + + UNION ALL + SELECT count(1) as sum,"2" as type FROM alarms_temp ar where ar.TS>=CURDATE() + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"2" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>=CURDATE() - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"3" as type FROM alarms_temp ar where ar.TS>= CURDATE() - INTERVAL DAYOFWEEK(CURDATE()) - 2 DAY + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"3" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>= CURDATE() - INTERVAL DAYOFWEEK(CURDATE()) - 2 DAY - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"4" as type FROM alarms_temp ar where ar.TS>=DATE_FORMAT(NOW(),'%Y-%m-01') + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"4" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>=DATE_FORMAT(NOW(),'%Y-%m-01') - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"5" as type FROM alarms_temp ar where ar.TS>= DATE_FORMAT(CURDATE(), '%Y-01-01') + - and bl.DEPTID in (${deptStrs}) - - UNION ALL - SELECT count(1) as sum,"5" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>= DATE_FORMAT(CURDATE(), '%Y-01-01') - and ar.EXCEPTION_TYPE='0' - - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java index 3e0edd6..9dab3a7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java @@ -71,4 +71,18 @@ private Long deptid; + @ApiModelProperty("经度") + private String lngGaode; + + @ApiModelProperty("纬度") + private String latGaode; + + @ApiModelProperty("监测类型") + private String watchObject; + + @ApiModelProperty("点位id") + private Long ledgerId; + + + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java index e938da8..60464c4 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java @@ -12,6 +12,7 @@ private String deviceType; private String tagNumber; private String ledgerCode; + private String ledgerName; private String place; //台账类型 private String type; 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 ac4cabe..e623df7 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 @@ -44,6 +44,7 @@ import static cn.hutool.core.date.DateUnit.DAY; import static com.casic.missiles.util.TimeConvertUtil.TimeConverter; +import static com.casic.missiles.util.TimeConvertUtil.TimeConverterSecond; /** *

@@ -180,8 +181,8 @@ public DeviceAlarmDetailDTO deviceAlarmDetail(Long id) { DeviceAlarmDetailDTO alarmDetail = this.baseMapper.deviceAlarmDetail(id); - alarmDetail.setCancelDuration(TimeConverter(alarmDetail.getCancelDuration())); - alarmDetail.setProcessDuration(TimeConverter(alarmDetail.getProcessDuration())); + alarmDetail.setCancelDuration(TimeConverterSecond(alarmDetail.getCancelDuration())); + alarmDetail.setProcessDuration(TimeConverterSecond(alarmDetail.getProcessDuration())); alarmDetail.setDeptName(ObjectUtil.isNotEmpty(alarmDetail.getDeptid()) ? commonServer.getDeptNamesByDeptId(alarmDetail.getDeptid()) : ""); // alarmDetail.setAddress(alarmDetail.getTagNumber().concat("|").concat(alarmDetail.getLedgerName())); alarmDetail.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmDetail.getAlarmCategory())); @@ -524,16 +525,26 @@ @Override public void cancelDeviceAlarm(String devCode) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("DEVCODE", devCode); - updateWrapper.eq("EXCEPTION_TYPE", "1"); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE", devCode); + queryWrapper.eq("EXCEPTION_TYPE", "1"); //只有挂起和已处置的才消 // updateWrapper.ge("PROCESS_STATUS", "3"); - updateWrapper.eq("STATUS", "1"); - updateWrapper.set("STATUS", "0"); - updateWrapper.set("CANCEL_TIME", new Date()); - this.update(updateWrapper); - //toDo:需要加流程取消日志 + queryWrapper.eq("STATUS", "1"); + List alarmRecordsList = this.list(queryWrapper); + if (alarmRecordsList != null && alarmRecordsList.size() > 0) { + alarmRecordsList.forEach(alarmRecords -> { + alarmRecords.setStatus("0"); + alarmRecords.setCancelTime(new Date()); + alarmRecords.setPreProcessStatus(alarmRecords.getProcessStatus()); + alarmRecords.setProcessStatus(ApprovalStatusEnum.FINISHED.getCode()); + this.updateById(alarmRecords); + }); + //添加流程日志 + approvalLogMapper.insert(new ApprovalLog(alarmRecordsList.get(0).getId(), "1", + "", ApprovalStatusEnum.FINISHED.getCode(), + null)); + } } @Override @@ -674,8 +685,12 @@ AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), data.concat("%LEL"), data, - alarmRuleResponseDTO.getAlarmLevelId(),DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmLevelId(), DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmRuleResponseDTO.getAlarmTypeName(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -721,7 +736,7 @@ @Override - public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime,List busWellDTOList, + public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime, List busWellDTOList, Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { @@ -730,8 +745,12 @@ try { AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, - alarmLevelId, DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmLevelId, DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmTypeName, + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace() + , "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -793,7 +812,11 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.get().getAlarmTypeId(), alarmRuleResponseDTO.get().getAlarmTypeName(), alarmRuleResponseDTO.get().getAlarmLevelId(), DateUtil.parse(logTime), - alarmRuleResponseDTO.get().getAlarmThreshold(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "1"); + alarmRuleResponseDTO.get().getAlarmThreshold(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "1"); this.save(alarmRecords); } catch (Exception e) { e.printStackTrace(); @@ -846,8 +869,8 @@ * @param cell */ @Override - public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent,String logTime) { - this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent,DateUtil.parse(logTime)); + public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent, String logTime) { + this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent, DateUtil.parse(logTime)); } @Override @@ -903,7 +926,10 @@ offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), - offDeviceDTO.getPlace(), "1"); + ObjectUtil.isNotEmpty(offDeviceDTO.getLedgerName()) ? + offDeviceDTO.getTagNumber().concat("|"). + concat(offDeviceDTO.getLedgerName()) : + offDeviceDTO.getPlace(), "1"); alarmRecordsList.add(alarmRecords); ledgers.add(offDeviceDTO); } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java new file mode 100644 index 0000000..cb554b9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.data.dto; + + +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class PanDataDTO implements Serializable { + + private static final long serialVersionUID = 1232822221212L; + + private String dataTime; + + private String attributeType; + + private String dataValue; + + private String deviceCode; + + + +} 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 index a082d00..2a943ad 100644 --- 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 @@ -23,6 +23,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -37,6 +38,7 @@ * @author zt * @since 2025-01-22 */ +@Slf4j @RequiredArgsConstructor @Service public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { @@ -71,8 +73,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -80,8 +81,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}",devCode, e); } } @@ -141,8 +141,7 @@ } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -222,8 +221,10 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); +// e.printStackTrace(); +// log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); + } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java index dd80611..cd24860 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java @@ -83,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -124,8 +123,7 @@ busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -200,8 +198,7 @@ alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } //低电量报警处理 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 302b446..f0def39 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 @@ -76,8 +76,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -85,8 +84,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -133,8 +131,7 @@ if (i < jsonArray.size() - 1) continue; busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -217,8 +214,7 @@ } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } 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 e5ba8f7..a02af88 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataMonitorPipeOtherServiceImpl extends ServiceImpl implements IDataMonitorPipeOtherService, IDataAbstractService { @@ -73,8 +75,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -116,8 +116,7 @@ //2.写入新的报警 alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + log.error("处理报警时发生异常,devcode:{},e:{}", devCode, e); } } } @@ -160,8 +159,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmEventCode)); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -341,8 +339,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag || ObjectUtil.isNotEmpty(alarmContent) ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java index 5dc8c2b..f383690 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java @@ -2,7 +2,6 @@ import cn.hutool.core.date.DateUtil; 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; @@ -13,15 +12,20 @@ import com.casic.missiles.modular.alarm.service.IAlarmRuleService; import com.casic.missiles.modular.data.dao.DataGasMapper; import com.casic.missiles.modular.data.dao.DataPanGasMapper; +import com.casic.missiles.modular.data.dto.PanDataDTO; import com.casic.missiles.modular.data.entity.DataPanGas; import com.casic.missiles.modular.data.service.IDataPanGasService; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.CommonUtil; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonToken; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.io.IOException; import java.util.Date; import java.util.List; import java.util.Map; @@ -68,78 +72,179 @@ } - @Transactional @Override public boolean processAcceptGasData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); - JSONArray jsonArray = jsonObject.getJSONArray("data"); - String devCode = ""; - for (int i = 0; i < jsonArray.size(); i++) { - try { - devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); - if (ObjectUtil.isEmpty(devCode)) continue; - List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); - String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); - String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); - //暂只存浓度 - if ("2".equals(attributeType)) continue; - String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); - gas = String.format("%.2f", Double.valueOf(gas)); - //1.存数据 - save(DataPanGas.builder() - .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") - .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") - .deviceCode(devCode) - .concentration(gas) - .logtime(DateUtil.parseDateTime(dataTime)) - .build());//存储采集数据 - //2.有无超限处理流程(判断最后一条数据) -// if (i < jsonArray.size() - 1) continue; - - //3.清除设备告警 - alarmRecordsService.cancelDeviceAlarm(devCode); - //4.存报警 - //若没绑场站,则不产生报警 - boolean alarmFlag = false; - String bfcf = busDeviceService.getBfcf(devCode); - 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))) { - dataTime = dataTime.replaceAll("-", ""); - dataTime = dataTime.replaceAll(":", ""); - dataTime = dataTime.replaceAll("\\s+", ""); - alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); - } - break; - } - } - } - //5.清数据报警 - if (!alarmFlag) { - alarmRecordsService.cancelDataAlarm(devCode); - } - //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); - //7.更新监测井状态 (1:正常,2:报警) - if (busWellDTOList != null && busWellDTOList.size() > 0) { - alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); - } - } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + JsonFactory factory = new JsonFactory(); + try (JsonParser parser = factory.createParser(jsonObject.getString("data"))) { + // 定位到 "data" 数组 + while (parser.nextToken() != JsonToken.START_ARRAY) { + parser.nextToken(); } + // 逐条处理数据 + while (parser.nextToken() != JsonToken.END_ARRAY) { + if (parser.getCurrentToken() == JsonToken.START_OBJECT) { + processSingleData(parseJsonObject(parser)); + } + + } + } catch (IOException e) { + e.printStackTrace(); } + return true; } + private PanDataDTO parseJsonObject(JsonParser parser) throws IOException { + PanDataDTO panDataDTO = new PanDataDTO(); + while (parser.nextToken() != JsonToken.END_OBJECT) { + String fieldName = parser.getCurrentName(); + if ("dataTime".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataTime(parser.getText()); + } else if ("attributeType".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setAttributeType(parser.getText()); + } else if ("dataValue".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataValue(parser.getText()); + } else if ("deviceCode".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDeviceCode(parser.getText()); + } + } + return panDataDTO; + } + + + private void processSingleData(PanDataDTO panDataDTO) { + try { + String devCode = panDataDTO.getDeviceCode(); + if (ObjectUtil.isEmpty(devCode)) return; + List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); + String gas = panDataDTO.getDataValue(); + String attributeType = panDataDTO.getAttributeType(); + //暂只存浓度 + if ("2".equals(attributeType)) return; + String dataTime = panDataDTO.getDataTime(); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataPanGas.builder() + .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .deviceCode(devCode) + .concentration(gas) + .logtime(DateUtil.parseDateTime(dataTime)) + .build());//存储采集数据 + + boolean alarmFlag = false; + String bfcf = busDeviceService.getBfcf(devCode); + 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))) { +// dataTime = dataTime.replaceAll("-", ""); +// dataTime = dataTime.replaceAll(":", ""); +// dataTime = dataTime.replaceAll("\\s+", ""); + alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); + //7.更新监测井状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + log.error("处理云台数据时发生异常,devcode:{},data:{},e:{}", panDataDTO.getDeviceCode(), panDataDTO.toString(), e); + } + } + + +// @Transactional +// @Override +// public boolean processAcceptGasData(Map dataParams) { +// JSONObject jsonObject = new JSONObject(dataParams); +// JSONArray jsonArray = jsonObject.getJSONArray("data"); +// String devCode = ""; +// for (int i = 0; i < jsonArray.size(); i++) { +// try { +// devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); +// if (ObjectUtil.isEmpty(devCode)) continue; +// List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); +// String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); +// String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); +// //暂只存浓度 +// if ("2".equals(attributeType)) continue; +// String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); +// gas = String.format("%.2f", Double.valueOf(gas)); +// //1.存数据 +// save(DataPanGas.builder() +// .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") +// .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") +// .deviceCode(devCode) +// .concentration(gas) +// .logtime(DateUtil.parseDateTime(dataTime)) +// .build());//存储采集数据 +// //2.有无超限处理流程(判断最后一条数据) +//// if (i < jsonArray.size() - 1) continue; +// +// //3.清除设备告警 +//// alarmRecordsService.cancelDeviceAlarm(devCode); +// //4.存报警 +// //若没绑场站,则不产生报警 +// boolean alarmFlag = false; +// String bfcf = busDeviceService.getBfcf(devCode); +// 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))) { +//// dataTime = dataTime.replaceAll("-", ""); +//// dataTime = dataTime.replaceAll(":", ""); +//// dataTime = dataTime.replaceAll("\\s+", ""); +// alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); +// } +// break; +// } +// } +// } +// //5.清数据报警 +// if (!alarmFlag) { +// alarmRecordsService.cancelDataAlarm(devCode); +// } +// //6.更新电量及状态 (1:正常,2:报警) +// alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); +// //7.更新监测井状态 (1:正常,2:报警) +// if (busWellDTOList != null && busWellDTOList.size() > 0) { +// alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); +// } +// } catch (Exception e) { +// log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); +// } +// } +// return true; +// } + @Override public boolean acceptAlarmData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); 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 37d731d..a17953b 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataTubeOtherServiceImpl extends ServiceImpl implements IDataTubeOtherService, IDataAbstractService { @@ -73,7 +75,7 @@ } } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,7 +84,7 @@ imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -122,8 +124,8 @@ } //特殊处理消警 if ("CancelWaterImmersionAlarm".equals(alarmType)) { - if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { - alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + if (alarmRecordsService.isWatchAlarms(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelWatchAlarms(devCode, "WaterImmersionAlarm"); } continue; } @@ -146,8 +148,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmType)); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -227,8 +228,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java new file mode 100644 index 0000000..3be65dd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java @@ -0,0 +1,170 @@ +package com.casic.missiles.modular.aop; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.aop.annotion.ReflectionUtils; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.modular.interfaces.log.LogManager; +import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.Serializable; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Aspect +@Component +public class OperateLogAspect { + private Logger log = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private ApplicationContext applicationContext; + + public static volatile Map oldMap = new HashMap<>(); + + public OperateLogAspect() { + } + + @Pointcut("@annotation(com.casic.missiles.modular.aop.annotion.OperateLog)") + public void cutService() { + } + + @Around("cutService()") + public Object recordSysLog(ProceedingJoinPoint point) throws Throwable { + Object result = point.proceed(); + + try { + this.handle(point); + } catch (Exception var4) { + this.log.error("日志记录出错!", var4); + } + + return result; + } + + /** + * 处理请求前执行 + */ + @Before(value = "@annotation(operateLog)") + public void boBefore(JoinPoint joinPoint, OperateLog operateLog) { + Object info = joinPoint.getArgs()[0]; + if ("edit".equals(operateLog.type()) && operateLog.needDefaultCompare()) { + Class cls = operateLog.serviceClass(); + IService service = (IService) applicationContext.getBean(cls); + Object result; + if (service instanceof IBusDeviceService) { + result = ((IBusDeviceService) service).getByDeviceId((Long) ReflectionUtils.getFieldValue(info, "id")); + } else + result = service.getById((Serializable) ReflectionUtils.getFieldValue(info, "id")); + oldMap = (Map) objectToMap(result); // 存储修改前的对象 + } + } + + private void handle(ProceedingJoinPoint point) throws Exception { + Signature sig = point.getSignature(); + MethodSignature msig = null; + if (!(sig instanceof MethodSignature)) { + throw new IllegalArgumentException("该注解只能用于方法"); + } else { + msig = (MethodSignature) sig; + Object target = point.getTarget(); + Method currentMethod = target.getClass().getMethod(msig.getName(), msig.getParameterTypes()); + String methodName = currentMethod.getName(); + AuthUser user = ShiroKit.getUser(); + if (null != user) { + String className = point.getTarget().getClass().getName(); + Object[] params = point.getArgs(); + OperateLog annotation = (OperateLog) currentMethod.getAnnotation(OperateLog.class); + String bussinessName = annotation.value(); + String key = annotation.key(); + Class dictClass = annotation.dict(); + String sb = argsArrayToString(params); + String msg = sb; + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + if ("add".equals(annotation.type())) { + Map parameters = (Map) objectToMap(params[0]); + msg = CollectionUtils.isEmpty(parameters) ? sb : ReflectionUtils.parseMutiKey(dictMap, key, parameters); + } else if ("edit".equals(annotation.type())) { + msg = CollectionUtils.isEmpty(oldMap) ? sb : ReflectionUtils.contrastObj(dictClass, key, params[0], oldMap); + }else if("delete".equals(annotation.type())){ + msg=dictMap.get(annotation.key())+":"+ReflectionUtils.getDeleteKeys(params[0]); + } + LogManager.me().executeLog(LogTaskFactory.bussinessLog(user.getId(), bussinessName, className, methodName, msg)); + } + } + } + + + /** + * 参数拼装 + */ + private String argsArrayToString(Object[] paramsArray) { + Gson gson = new GsonBuilder().create(); + String params = ""; + if (paramsArray != null && paramsArray.length > 0) { + for (int i = 0; i < paramsArray.length; i++) { + if (!isFilterObject(paramsArray[i])) { + params += gson.toJson(paramsArray[i]) + " & "; + } + } + } + return params.trim(); + } + + + /** + * 判断是否需要过滤的对象。 + * + * @param o 对象信息。 + * @return 如果是需要过滤的对象,则返回true;否则返回false。 + */ + public boolean isFilterObject(final Object o) { + return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse; + } + + private Map objectToMap(Object obj) { + if (obj == null) { + return null; + } + ObjectMapper mapper = new ObjectMapper(); + mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + // 如果使用JPA请自己打开这条配置 + // mapper.addMixIn(Object.class, IgnoreHibernatePropertiesInJackson.class); + Map mappedObject = mapper.convertValue(obj, Map.class); + return mappedObject; + + + } +} + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java new file mode 100644 index 0000000..77afa9c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.aop.annotion; + +import java.lang.annotation.*; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.FIELD}) +@Documented +public @interface DataName { + String name() default ""; // 字段名称 + + /** + * 读取枚举内容转义表达式 (如: 0=男,1=女,2=未知) + */ + String readConverterExp() default ""; +} + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java new file mode 100644 index 0000000..f1f59ad --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.aop.annotion; + + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.common.constant.dictmap.base.SystemDict; + +import java.lang.annotation.*; + +@Inherited +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.METHOD}) +public @interface OperateLog { + String value() default ""; + + String key() default "id"; + + Class serviceClass() default IService.class; + + // 是否需要比较新旧数据 + boolean needDefaultCompare() default true; + + //操作类型 add update delete + String type() default "update"; + + Class dict() default SystemDict.class; +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java new file mode 100644 index 0000000..eb773ad --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java @@ -0,0 +1,328 @@ +package com.casic.missiles.modular.aop.annotion; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.modular.interfaces.dictmap.factory.DictFieldWrapperFactory; +import lombok.extern.slf4j.Slf4j; + +import java.beans.PropertyDescriptor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.*; + +import static com.casic.missiles.modular.interfaces.utils.Contrast.firstCharToLowerCase; +import static com.casic.missiles.modular.interfaces.utils.Contrast.firstCharToUpperCase; + +@Slf4j +public class ReflectionUtils { + + /** + * 直接读取对象属性值, 无视private/protected修饰符, 不经过getter函数. + * + * @param obj 读取的对象 + * @param fieldName 读取的列 + * @return 属性值 + */ + public static Object getFieldValue(final Object obj, final String fieldName) { + Field field = getAccessibleField(obj, fieldName); + if (field == null) { + throw new IllegalArgumentException("Could not find field [" + fieldName + "] on target [" + obj + "]"); + } + + Object result = null; + try { + result = field.get(obj); + } catch (IllegalAccessException e) { + log.error("不可能抛出的异常{}", e.getMessage()); + e.printStackTrace(); + } + return result; + } + + /** + * 循环向上转型, 获取对象的DeclaredField, 并强制设置为可访问.如向上转型到Object仍无法找到, 返回null. + * + * @param obj 查找的对象 + * @param fieldName 列名 + * @return 列 + */ + public static Field getAccessibleField(final Object obj, final String fieldName) { + for (Class superClass = obj.getClass(); superClass != Object.class; superClass = superClass.getSuperclass()) { + try { + Field field = superClass.getDeclaredField(fieldName); + makeAccessible(field); + return field; + } catch (NoSuchFieldException e) { // NOSONAR + // Field不在当前类定义,继续向上转型 + e.printStackTrace(); + continue; // new add + } + } + return null; + } + + /** + * 改变private/protected的成员变量为public,尽量不调用实际改动的语句,避免JDK的SecurityManager抱怨。 + * + * @param + */ + public static void makeAccessible(Field field) { + if ((!Modifier.isPublic(field.getModifiers()) || !Modifier.isPublic(field.getDeclaringClass().getModifiers()) || Modifier + .isFinal(field.getModifiers())) && !field.isAccessible()) { + field.setAccessible(true); + } + } + + /** + * 获取两个对象同名属性内容不相同的列表 + * + * @param class1 old对象 + * @param class2 new对象 + * @return 区别列表 + * @throws ClassNotFoundException 异常 + * @throws IllegalAccessException 异常 + */ + public static List> compareTwoClass(Object class1, Object class2) throws ClassNotFoundException, IllegalAccessException { + List> list = new ArrayList>(); + // 获取对象的class + Class clazz1 = class1.getClass(); + Class clazz2 = class2.getClass(); + // 获取对象的属性列表 + Field[] field1 = clazz1.getDeclaredFields(); + Field[] field2 = clazz2.getDeclaredFields(); + StringBuilder sb = new StringBuilder(); + // 遍历属性列表field1 + for (int i = 0; i < field1.length; i++) { + // 遍历属性列表field2 + for (int j = 0; j < field2.length; j++) { + // 如果field1[i]属性名与field2[j]属性名内容相同 + if (field1[i].getName().equals(field2[j].getName())) { + if (field1[i].getName().equals(field2[j].getName())) { + field1[i].setAccessible(true); + field2[j].setAccessible(true); + // 如果field1[i]属性值与field2[j]属性值内容不相同 + if (!compareTwo(field1[i].get(class1), field2[j].get(class2))) { + Map map2 = new HashMap(); + DataName name = field1[i].getAnnotation(DataName.class); + String fieldName = ""; + if (name != null) { + fieldName = name.name(); + } else { + fieldName = field1[i].getName(); + } + map2.put("name", fieldName); + map2.put("old", field1[i].get(class1)); + map2.put("new", field2[j].get(class2)); + list.add(map2); + } + break; + } + } + } + } + return list; + } + + /** + * 对比两个数据是否内容相同 + * + * @param object1 比较对象1 + * @param object2 比较对象2 + * @return boolean类型 + */ + public static boolean compareTwo(Object object1, Object object2) { + if (object1 == null && object2 == null) { + return true; + } + if (object1 == null && object2 != null) { + return false; + } + if (object1.equals(object2)) { + return true; + } + return false; + } + + public static String contrastObjByName(Class dictClass, String key, Object pojo1, Map pojo2) throws IllegalAccessException, InstantiationException { + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + String str = parseMutiKey(dictMap, key, pojo2) + ";;;"; + + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if (!"serialVersionUID".equals(field.getName())) { + String prefix = "get"; + int prefixLength = 3; + if (field.getType().getName().equals("java.lang.Boolean")) { + prefix = "is"; + prefixLength = 2; + } + + Method getMethod = null; + + try { + getMethod = clazz.getDeclaredMethod(prefix + firstCharToUpperCase(field.getName())); + } catch (NoSuchMethodException var22) { + System.err.println("this className:" + clazz.getName() + " is not methodName: " + var22.getMessage()); + continue; + } + + Object o1 = getMethod.invoke(pojo1); + Object o2 = pojo2.get(firstCharToLowerCase(getMethod.getName().substring(prefixLength))); + if (o1 != null && o2 != null) { + if (o1 instanceof Date) { + o1 = DateUtil.format(new Date(), "yyyy-MM-dd"); + } else if (o1 instanceof Integer) { + o2 = Integer.parseInt(o2.toString()); + } + + if (!o1.toString().equals(o2.toString())) { + if (i != 1) { + str = str + ";;;"; + } + + String fieldName = dictMap.get(field.getName()); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(field.getName()); + if (fieldWarpperMethodName != null) { + Object o1Warpper = DictFieldWrapperFactory.createFieldWrapper(o1, fieldWarpperMethodName); + Object o2Warpper = DictFieldWrapperFactory.createFieldWrapper(o2, fieldWarpperMethodName); + str = str + "字段名称:" + fieldName + ",旧值:" + o1Warpper + ",新值:" + o2Warpper; + } else { + str = str + "字段名称:" + fieldName + ",旧值:" + o1 + ",新值:" + o2; + } + + ++i; + } + } + } + } + } catch (Exception var23) { + var23.printStackTrace(); + } + + return str; + } + + public static String parseMutiKey(AbstractDictMap dictMap, String key, Map requests) { + StringBuilder sb = new StringBuilder(); + if (key.indexOf(",") != -1) { + String[] keys = key.split(","); + String[] var13 = keys; + int var14 = keys.length; + + for (int var7 = 0; var7 < var14; ++var7) { + String item = var13[var7].trim(); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(item); + Object value = requests.get(item); + if (fieldWarpperMethodName != null) { + Object valueWarpper = DictFieldWrapperFactory.createFieldWrapper(value, fieldWarpperMethodName); + sb.append(dictMap.get(item) + "=" + valueWarpper + ","); + } else { + sb.append(dictMap.get(item) + "=" + (ObjectUtil.isNotEmpty(value) ? value.toString() : "") + ","); + } + } + + return StrUtil.removeSuffix(sb.toString(), ","); + } else { + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(key); + Object value = requests.get(key); + if (fieldWarpperMethodName != null) { + Object valueWarpper = DictFieldWrapperFactory.createFieldWrapper(value, fieldWarpperMethodName); + sb.append(dictMap.get(key) + "=" + valueWarpper); + } else { + sb.append(dictMap.get(key) + "=" + (ObjectUtil.isNotEmpty(value) ? value.toString() : "")); + } + + return sb.toString(); + } + } + + public static String getDeleteKeys(Object pojo1) { + String str = ""; + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if ("keys".equals(field.getName())) { + PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); + Method getMethod = pd.getReadMethod(); + Object o1 = getMethod.invoke(pojo1); + return ObjectUtil.isNotEmpty(o1) ? o1.toString().replaceAll("\\[|]", "") : "".concat(",已删除"); + } + } + + } catch (Exception var21) { + var21.printStackTrace(); + } + return str; + } + + public static String contrastObj(Class dictClass, String key, Object pojo1, Map pojo2) throws IllegalAccessException, InstantiationException { + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); +// String str = parseMutiKey(dictMap, key, pojo2) + ";;;"; + String str = ""; + + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if (!"serialVersionUID".equals(field.getName())) { + PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); + Method getMethod = pd.getReadMethod(); + Object o1 = getMethod.invoke(pojo1); + Object o2 = pojo2.get(firstCharToLowerCase(getMethod.getName().substring(3))); + if (o1 != null && o2 != null) { + if (o1 instanceof Integer) { + o2 = Integer.parseInt(o2.toString()); + } else if (o1 instanceof Date) { + o1 = DateUtil.format((Date) o1, "yyyy-MM-dd HH:mm:ss"); + } + + if (!o1.toString().equals(o2.toString())) { + if (i != 1) { + str = str + ";"; + } + + String fieldName = dictMap.get(field.getName()); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(field.getName()); + if (fieldWarpperMethodName != null) { + Object o1Warpper = DictFieldWrapperFactory.createFieldWrapper(o1, fieldWarpperMethodName); + Object o2Warpper = DictFieldWrapperFactory.createFieldWrapper(o2, fieldWarpperMethodName); + str = str + fieldName + ":将【" + o1Warpper + "】,改为【" + o2Warpper + "】"; + } else { + str = str + fieldName + ":将【" + o1 + "】,改为【" + o2 + "】"; + } + + ++i; + } + } + } + } + } catch (Exception var21) { + var21.printStackTrace(); + } + + return str; + } + + +} \ No newline at end of file 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 c8583d1..18b16e5 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 @@ -346,7 +346,7 @@ ay.ALARM_CATEGORY, ac.ALARM_LEVEL as alarmLevelName, bm.NAME AS manufactureName, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.CANCEL_TIME) as cancelDuration + TIMESTAMPDIFF(MINUTE, rd.TS, rd.CANCEL_TIME) as cancelDuration FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -377,11 +377,14 @@ lr.ledgerName, lr.DEPTID, lr.id as ledgerId, + lr.lngGaode, + lr.latGaode, + lr.type as watchObject, bd.INSTALL_DATE, ay.ALARM_CATEGORY, ac.ALARM_LEVEL as alarmLevelName, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.CANCEL_TIME) as cancelDuration, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.PROCESS_TIME) as processDuration, + TIMESTAMPDIFF(SECOND, rd.TS, rd.CANCEL_TIME) as cancelDuration, + TIMESTAMPDIFF(SECOND, rd.TS, rd.PROCESS_TIME) as processDuration, bm.`NAME` AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -541,15 +544,22 @@ - SELECT count(1) as sum,"1" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where `STATUS` ='1' - and ar.EXCEPTION_TYPE='0' + + WITH alarm_temp as (SELECT + ar.id, + ar.ts, + lr.DEPTID + FROM + `alarm_records` ar + LEFT JOIN bus_device bd ON ar.DEVCODE = bd.DEVCODE + AND bd.VALID > 0 + LEFT JOIN bus_device_ledger bl ON bd.ID = bl.DEVICE_ID + AND bl.VALID = '1' + JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID + AND lr.type = bl.type + AND lr.VALID = '1' + AND lr.ledgerCode = ar.LEDGER_CODE + WHERE + `STATUS` = '1' + AND ar.EXCEPTION_TYPE = '0'),alarms_temp as( + SELECT ar.id, ar.ts, bl.DEPTID FROM `alarm_records` ar join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.EXCEPTION_TYPE='0' + ) + SELECT count(1) as sum,"1" as type FROM alarm_temp ar + + + and ar.DEPTID in (${deptStrs}) + + + UNION ALL + SELECT count(1) as sum,"2" as type FROM alarms_temp ar where ar.TS>=CURDATE() + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"2" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>=CURDATE() - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"3" as type FROM alarms_temp ar where ar.TS>= CURDATE() - INTERVAL DAYOFWEEK(CURDATE()) - 2 DAY + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"3" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>= CURDATE() - INTERVAL DAYOFWEEK(CURDATE()) - 2 DAY - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"4" as type FROM alarms_temp ar where ar.TS>=DATE_FORMAT(NOW(),'%Y-%m-01') + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"4" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>=DATE_FORMAT(NOW(),'%Y-%m-01') - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"5" as type FROM alarms_temp ar where ar.TS>= DATE_FORMAT(CURDATE(), '%Y-01-01') + - and bl.DEPTID in (${deptStrs}) - - UNION ALL - SELECT count(1) as sum,"5" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>= DATE_FORMAT(CURDATE(), '%Y-01-01') - and ar.EXCEPTION_TYPE='0' - - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java index 3e0edd6..9dab3a7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java @@ -71,4 +71,18 @@ private Long deptid; + @ApiModelProperty("经度") + private String lngGaode; + + @ApiModelProperty("纬度") + private String latGaode; + + @ApiModelProperty("监测类型") + private String watchObject; + + @ApiModelProperty("点位id") + private Long ledgerId; + + + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java index e938da8..60464c4 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java @@ -12,6 +12,7 @@ private String deviceType; private String tagNumber; private String ledgerCode; + private String ledgerName; private String place; //台账类型 private String type; 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 ac4cabe..e623df7 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 @@ -44,6 +44,7 @@ import static cn.hutool.core.date.DateUnit.DAY; import static com.casic.missiles.util.TimeConvertUtil.TimeConverter; +import static com.casic.missiles.util.TimeConvertUtil.TimeConverterSecond; /** *

@@ -180,8 +181,8 @@ public DeviceAlarmDetailDTO deviceAlarmDetail(Long id) { DeviceAlarmDetailDTO alarmDetail = this.baseMapper.deviceAlarmDetail(id); - alarmDetail.setCancelDuration(TimeConverter(alarmDetail.getCancelDuration())); - alarmDetail.setProcessDuration(TimeConverter(alarmDetail.getProcessDuration())); + alarmDetail.setCancelDuration(TimeConverterSecond(alarmDetail.getCancelDuration())); + alarmDetail.setProcessDuration(TimeConverterSecond(alarmDetail.getProcessDuration())); alarmDetail.setDeptName(ObjectUtil.isNotEmpty(alarmDetail.getDeptid()) ? commonServer.getDeptNamesByDeptId(alarmDetail.getDeptid()) : ""); // alarmDetail.setAddress(alarmDetail.getTagNumber().concat("|").concat(alarmDetail.getLedgerName())); alarmDetail.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmDetail.getAlarmCategory())); @@ -524,16 +525,26 @@ @Override public void cancelDeviceAlarm(String devCode) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("DEVCODE", devCode); - updateWrapper.eq("EXCEPTION_TYPE", "1"); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE", devCode); + queryWrapper.eq("EXCEPTION_TYPE", "1"); //只有挂起和已处置的才消 // updateWrapper.ge("PROCESS_STATUS", "3"); - updateWrapper.eq("STATUS", "1"); - updateWrapper.set("STATUS", "0"); - updateWrapper.set("CANCEL_TIME", new Date()); - this.update(updateWrapper); - //toDo:需要加流程取消日志 + queryWrapper.eq("STATUS", "1"); + List alarmRecordsList = this.list(queryWrapper); + if (alarmRecordsList != null && alarmRecordsList.size() > 0) { + alarmRecordsList.forEach(alarmRecords -> { + alarmRecords.setStatus("0"); + alarmRecords.setCancelTime(new Date()); + alarmRecords.setPreProcessStatus(alarmRecords.getProcessStatus()); + alarmRecords.setProcessStatus(ApprovalStatusEnum.FINISHED.getCode()); + this.updateById(alarmRecords); + }); + //添加流程日志 + approvalLogMapper.insert(new ApprovalLog(alarmRecordsList.get(0).getId(), "1", + "", ApprovalStatusEnum.FINISHED.getCode(), + null)); + } } @Override @@ -674,8 +685,12 @@ AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), data.concat("%LEL"), data, - alarmRuleResponseDTO.getAlarmLevelId(),DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmLevelId(), DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmRuleResponseDTO.getAlarmTypeName(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -721,7 +736,7 @@ @Override - public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime,List busWellDTOList, + public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime, List busWellDTOList, Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { @@ -730,8 +745,12 @@ try { AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, - alarmLevelId, DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmLevelId, DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmTypeName, + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace() + , "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -793,7 +812,11 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.get().getAlarmTypeId(), alarmRuleResponseDTO.get().getAlarmTypeName(), alarmRuleResponseDTO.get().getAlarmLevelId(), DateUtil.parse(logTime), - alarmRuleResponseDTO.get().getAlarmThreshold(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "1"); + alarmRuleResponseDTO.get().getAlarmThreshold(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "1"); this.save(alarmRecords); } catch (Exception e) { e.printStackTrace(); @@ -846,8 +869,8 @@ * @param cell */ @Override - public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent,String logTime) { - this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent,DateUtil.parse(logTime)); + public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent, String logTime) { + this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent, DateUtil.parse(logTime)); } @Override @@ -903,7 +926,10 @@ offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), - offDeviceDTO.getPlace(), "1"); + ObjectUtil.isNotEmpty(offDeviceDTO.getLedgerName()) ? + offDeviceDTO.getTagNumber().concat("|"). + concat(offDeviceDTO.getLedgerName()) : + offDeviceDTO.getPlace(), "1"); alarmRecordsList.add(alarmRecords); ledgers.add(offDeviceDTO); } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java new file mode 100644 index 0000000..cb554b9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.data.dto; + + +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class PanDataDTO implements Serializable { + + private static final long serialVersionUID = 1232822221212L; + + private String dataTime; + + private String attributeType; + + private String dataValue; + + private String deviceCode; + + + +} 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 index a082d00..2a943ad 100644 --- 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 @@ -23,6 +23,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -37,6 +38,7 @@ * @author zt * @since 2025-01-22 */ +@Slf4j @RequiredArgsConstructor @Service public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { @@ -71,8 +73,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -80,8 +81,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}",devCode, e); } } @@ -141,8 +141,7 @@ } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -222,8 +221,10 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); +// e.printStackTrace(); +// log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); + } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java index dd80611..cd24860 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java @@ -83,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -124,8 +123,7 @@ busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -200,8 +198,7 @@ alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } //低电量报警处理 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 302b446..f0def39 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 @@ -76,8 +76,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -85,8 +84,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -133,8 +131,7 @@ if (i < jsonArray.size() - 1) continue; busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -217,8 +214,7 @@ } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } 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 e5ba8f7..a02af88 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataMonitorPipeOtherServiceImpl extends ServiceImpl implements IDataMonitorPipeOtherService, IDataAbstractService { @@ -73,8 +75,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -116,8 +116,7 @@ //2.写入新的报警 alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + log.error("处理报警时发生异常,devcode:{},e:{}", devCode, e); } } } @@ -160,8 +159,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmEventCode)); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -341,8 +339,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag || ObjectUtil.isNotEmpty(alarmContent) ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java index 5dc8c2b..f383690 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java @@ -2,7 +2,6 @@ import cn.hutool.core.date.DateUtil; 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; @@ -13,15 +12,20 @@ import com.casic.missiles.modular.alarm.service.IAlarmRuleService; import com.casic.missiles.modular.data.dao.DataGasMapper; import com.casic.missiles.modular.data.dao.DataPanGasMapper; +import com.casic.missiles.modular.data.dto.PanDataDTO; import com.casic.missiles.modular.data.entity.DataPanGas; import com.casic.missiles.modular.data.service.IDataPanGasService; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.CommonUtil; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonToken; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.io.IOException; import java.util.Date; import java.util.List; import java.util.Map; @@ -68,78 +72,179 @@ } - @Transactional @Override public boolean processAcceptGasData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); - JSONArray jsonArray = jsonObject.getJSONArray("data"); - String devCode = ""; - for (int i = 0; i < jsonArray.size(); i++) { - try { - devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); - if (ObjectUtil.isEmpty(devCode)) continue; - List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); - String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); - String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); - //暂只存浓度 - if ("2".equals(attributeType)) continue; - String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); - gas = String.format("%.2f", Double.valueOf(gas)); - //1.存数据 - save(DataPanGas.builder() - .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") - .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") - .deviceCode(devCode) - .concentration(gas) - .logtime(DateUtil.parseDateTime(dataTime)) - .build());//存储采集数据 - //2.有无超限处理流程(判断最后一条数据) -// if (i < jsonArray.size() - 1) continue; - - //3.清除设备告警 - alarmRecordsService.cancelDeviceAlarm(devCode); - //4.存报警 - //若没绑场站,则不产生报警 - boolean alarmFlag = false; - String bfcf = busDeviceService.getBfcf(devCode); - 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))) { - dataTime = dataTime.replaceAll("-", ""); - dataTime = dataTime.replaceAll(":", ""); - dataTime = dataTime.replaceAll("\\s+", ""); - alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); - } - break; - } - } - } - //5.清数据报警 - if (!alarmFlag) { - alarmRecordsService.cancelDataAlarm(devCode); - } - //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); - //7.更新监测井状态 (1:正常,2:报警) - if (busWellDTOList != null && busWellDTOList.size() > 0) { - alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); - } - } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + JsonFactory factory = new JsonFactory(); + try (JsonParser parser = factory.createParser(jsonObject.getString("data"))) { + // 定位到 "data" 数组 + while (parser.nextToken() != JsonToken.START_ARRAY) { + parser.nextToken(); } + // 逐条处理数据 + while (parser.nextToken() != JsonToken.END_ARRAY) { + if (parser.getCurrentToken() == JsonToken.START_OBJECT) { + processSingleData(parseJsonObject(parser)); + } + + } + } catch (IOException e) { + e.printStackTrace(); } + return true; } + private PanDataDTO parseJsonObject(JsonParser parser) throws IOException { + PanDataDTO panDataDTO = new PanDataDTO(); + while (parser.nextToken() != JsonToken.END_OBJECT) { + String fieldName = parser.getCurrentName(); + if ("dataTime".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataTime(parser.getText()); + } else if ("attributeType".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setAttributeType(parser.getText()); + } else if ("dataValue".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataValue(parser.getText()); + } else if ("deviceCode".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDeviceCode(parser.getText()); + } + } + return panDataDTO; + } + + + private void processSingleData(PanDataDTO panDataDTO) { + try { + String devCode = panDataDTO.getDeviceCode(); + if (ObjectUtil.isEmpty(devCode)) return; + List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); + String gas = panDataDTO.getDataValue(); + String attributeType = panDataDTO.getAttributeType(); + //暂只存浓度 + if ("2".equals(attributeType)) return; + String dataTime = panDataDTO.getDataTime(); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataPanGas.builder() + .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .deviceCode(devCode) + .concentration(gas) + .logtime(DateUtil.parseDateTime(dataTime)) + .build());//存储采集数据 + + boolean alarmFlag = false; + String bfcf = busDeviceService.getBfcf(devCode); + 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))) { +// dataTime = dataTime.replaceAll("-", ""); +// dataTime = dataTime.replaceAll(":", ""); +// dataTime = dataTime.replaceAll("\\s+", ""); + alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); + //7.更新监测井状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + log.error("处理云台数据时发生异常,devcode:{},data:{},e:{}", panDataDTO.getDeviceCode(), panDataDTO.toString(), e); + } + } + + +// @Transactional +// @Override +// public boolean processAcceptGasData(Map dataParams) { +// JSONObject jsonObject = new JSONObject(dataParams); +// JSONArray jsonArray = jsonObject.getJSONArray("data"); +// String devCode = ""; +// for (int i = 0; i < jsonArray.size(); i++) { +// try { +// devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); +// if (ObjectUtil.isEmpty(devCode)) continue; +// List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); +// String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); +// String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); +// //暂只存浓度 +// if ("2".equals(attributeType)) continue; +// String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); +// gas = String.format("%.2f", Double.valueOf(gas)); +// //1.存数据 +// save(DataPanGas.builder() +// .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") +// .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") +// .deviceCode(devCode) +// .concentration(gas) +// .logtime(DateUtil.parseDateTime(dataTime)) +// .build());//存储采集数据 +// //2.有无超限处理流程(判断最后一条数据) +//// if (i < jsonArray.size() - 1) continue; +// +// //3.清除设备告警 +//// alarmRecordsService.cancelDeviceAlarm(devCode); +// //4.存报警 +// //若没绑场站,则不产生报警 +// boolean alarmFlag = false; +// String bfcf = busDeviceService.getBfcf(devCode); +// 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))) { +//// dataTime = dataTime.replaceAll("-", ""); +//// dataTime = dataTime.replaceAll(":", ""); +//// dataTime = dataTime.replaceAll("\\s+", ""); +// alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); +// } +// break; +// } +// } +// } +// //5.清数据报警 +// if (!alarmFlag) { +// alarmRecordsService.cancelDataAlarm(devCode); +// } +// //6.更新电量及状态 (1:正常,2:报警) +// alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); +// //7.更新监测井状态 (1:正常,2:报警) +// if (busWellDTOList != null && busWellDTOList.size() > 0) { +// alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); +// } +// } catch (Exception e) { +// log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); +// } +// } +// return true; +// } + @Override public boolean acceptAlarmData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); 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 37d731d..a17953b 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataTubeOtherServiceImpl extends ServiceImpl implements IDataTubeOtherService, IDataAbstractService { @@ -73,7 +75,7 @@ } } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,7 +84,7 @@ imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -122,8 +124,8 @@ } //特殊处理消警 if ("CancelWaterImmersionAlarm".equals(alarmType)) { - if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { - alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + if (alarmRecordsService.isWatchAlarms(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelWatchAlarms(devCode, "WaterImmersionAlarm"); } continue; } @@ -146,8 +148,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmType)); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -227,8 +228,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java new file mode 100644 index 0000000..3be65dd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java @@ -0,0 +1,170 @@ +package com.casic.missiles.modular.aop; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.aop.annotion.ReflectionUtils; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.modular.interfaces.log.LogManager; +import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.Serializable; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Aspect +@Component +public class OperateLogAspect { + private Logger log = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private ApplicationContext applicationContext; + + public static volatile Map oldMap = new HashMap<>(); + + public OperateLogAspect() { + } + + @Pointcut("@annotation(com.casic.missiles.modular.aop.annotion.OperateLog)") + public void cutService() { + } + + @Around("cutService()") + public Object recordSysLog(ProceedingJoinPoint point) throws Throwable { + Object result = point.proceed(); + + try { + this.handle(point); + } catch (Exception var4) { + this.log.error("日志记录出错!", var4); + } + + return result; + } + + /** + * 处理请求前执行 + */ + @Before(value = "@annotation(operateLog)") + public void boBefore(JoinPoint joinPoint, OperateLog operateLog) { + Object info = joinPoint.getArgs()[0]; + if ("edit".equals(operateLog.type()) && operateLog.needDefaultCompare()) { + Class cls = operateLog.serviceClass(); + IService service = (IService) applicationContext.getBean(cls); + Object result; + if (service instanceof IBusDeviceService) { + result = ((IBusDeviceService) service).getByDeviceId((Long) ReflectionUtils.getFieldValue(info, "id")); + } else + result = service.getById((Serializable) ReflectionUtils.getFieldValue(info, "id")); + oldMap = (Map) objectToMap(result); // 存储修改前的对象 + } + } + + private void handle(ProceedingJoinPoint point) throws Exception { + Signature sig = point.getSignature(); + MethodSignature msig = null; + if (!(sig instanceof MethodSignature)) { + throw new IllegalArgumentException("该注解只能用于方法"); + } else { + msig = (MethodSignature) sig; + Object target = point.getTarget(); + Method currentMethod = target.getClass().getMethod(msig.getName(), msig.getParameterTypes()); + String methodName = currentMethod.getName(); + AuthUser user = ShiroKit.getUser(); + if (null != user) { + String className = point.getTarget().getClass().getName(); + Object[] params = point.getArgs(); + OperateLog annotation = (OperateLog) currentMethod.getAnnotation(OperateLog.class); + String bussinessName = annotation.value(); + String key = annotation.key(); + Class dictClass = annotation.dict(); + String sb = argsArrayToString(params); + String msg = sb; + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + if ("add".equals(annotation.type())) { + Map parameters = (Map) objectToMap(params[0]); + msg = CollectionUtils.isEmpty(parameters) ? sb : ReflectionUtils.parseMutiKey(dictMap, key, parameters); + } else if ("edit".equals(annotation.type())) { + msg = CollectionUtils.isEmpty(oldMap) ? sb : ReflectionUtils.contrastObj(dictClass, key, params[0], oldMap); + }else if("delete".equals(annotation.type())){ + msg=dictMap.get(annotation.key())+":"+ReflectionUtils.getDeleteKeys(params[0]); + } + LogManager.me().executeLog(LogTaskFactory.bussinessLog(user.getId(), bussinessName, className, methodName, msg)); + } + } + } + + + /** + * 参数拼装 + */ + private String argsArrayToString(Object[] paramsArray) { + Gson gson = new GsonBuilder().create(); + String params = ""; + if (paramsArray != null && paramsArray.length > 0) { + for (int i = 0; i < paramsArray.length; i++) { + if (!isFilterObject(paramsArray[i])) { + params += gson.toJson(paramsArray[i]) + " & "; + } + } + } + return params.trim(); + } + + + /** + * 判断是否需要过滤的对象。 + * + * @param o 对象信息。 + * @return 如果是需要过滤的对象,则返回true;否则返回false。 + */ + public boolean isFilterObject(final Object o) { + return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse; + } + + private Map objectToMap(Object obj) { + if (obj == null) { + return null; + } + ObjectMapper mapper = new ObjectMapper(); + mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + // 如果使用JPA请自己打开这条配置 + // mapper.addMixIn(Object.class, IgnoreHibernatePropertiesInJackson.class); + Map mappedObject = mapper.convertValue(obj, Map.class); + return mappedObject; + + + } +} + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java new file mode 100644 index 0000000..77afa9c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.aop.annotion; + +import java.lang.annotation.*; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.FIELD}) +@Documented +public @interface DataName { + String name() default ""; // 字段名称 + + /** + * 读取枚举内容转义表达式 (如: 0=男,1=女,2=未知) + */ + String readConverterExp() default ""; +} + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java new file mode 100644 index 0000000..f1f59ad --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.aop.annotion; + + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.common.constant.dictmap.base.SystemDict; + +import java.lang.annotation.*; + +@Inherited +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.METHOD}) +public @interface OperateLog { + String value() default ""; + + String key() default "id"; + + Class serviceClass() default IService.class; + + // 是否需要比较新旧数据 + boolean needDefaultCompare() default true; + + //操作类型 add update delete + String type() default "update"; + + Class dict() default SystemDict.class; +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java new file mode 100644 index 0000000..eb773ad --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java @@ -0,0 +1,328 @@ +package com.casic.missiles.modular.aop.annotion; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.modular.interfaces.dictmap.factory.DictFieldWrapperFactory; +import lombok.extern.slf4j.Slf4j; + +import java.beans.PropertyDescriptor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.*; + +import static com.casic.missiles.modular.interfaces.utils.Contrast.firstCharToLowerCase; +import static com.casic.missiles.modular.interfaces.utils.Contrast.firstCharToUpperCase; + +@Slf4j +public class ReflectionUtils { + + /** + * 直接读取对象属性值, 无视private/protected修饰符, 不经过getter函数. + * + * @param obj 读取的对象 + * @param fieldName 读取的列 + * @return 属性值 + */ + public static Object getFieldValue(final Object obj, final String fieldName) { + Field field = getAccessibleField(obj, fieldName); + if (field == null) { + throw new IllegalArgumentException("Could not find field [" + fieldName + "] on target [" + obj + "]"); + } + + Object result = null; + try { + result = field.get(obj); + } catch (IllegalAccessException e) { + log.error("不可能抛出的异常{}", e.getMessage()); + e.printStackTrace(); + } + return result; + } + + /** + * 循环向上转型, 获取对象的DeclaredField, 并强制设置为可访问.如向上转型到Object仍无法找到, 返回null. + * + * @param obj 查找的对象 + * @param fieldName 列名 + * @return 列 + */ + public static Field getAccessibleField(final Object obj, final String fieldName) { + for (Class superClass = obj.getClass(); superClass != Object.class; superClass = superClass.getSuperclass()) { + try { + Field field = superClass.getDeclaredField(fieldName); + makeAccessible(field); + return field; + } catch (NoSuchFieldException e) { // NOSONAR + // Field不在当前类定义,继续向上转型 + e.printStackTrace(); + continue; // new add + } + } + return null; + } + + /** + * 改变private/protected的成员变量为public,尽量不调用实际改动的语句,避免JDK的SecurityManager抱怨。 + * + * @param + */ + public static void makeAccessible(Field field) { + if ((!Modifier.isPublic(field.getModifiers()) || !Modifier.isPublic(field.getDeclaringClass().getModifiers()) || Modifier + .isFinal(field.getModifiers())) && !field.isAccessible()) { + field.setAccessible(true); + } + } + + /** + * 获取两个对象同名属性内容不相同的列表 + * + * @param class1 old对象 + * @param class2 new对象 + * @return 区别列表 + * @throws ClassNotFoundException 异常 + * @throws IllegalAccessException 异常 + */ + public static List> compareTwoClass(Object class1, Object class2) throws ClassNotFoundException, IllegalAccessException { + List> list = new ArrayList>(); + // 获取对象的class + Class clazz1 = class1.getClass(); + Class clazz2 = class2.getClass(); + // 获取对象的属性列表 + Field[] field1 = clazz1.getDeclaredFields(); + Field[] field2 = clazz2.getDeclaredFields(); + StringBuilder sb = new StringBuilder(); + // 遍历属性列表field1 + for (int i = 0; i < field1.length; i++) { + // 遍历属性列表field2 + for (int j = 0; j < field2.length; j++) { + // 如果field1[i]属性名与field2[j]属性名内容相同 + if (field1[i].getName().equals(field2[j].getName())) { + if (field1[i].getName().equals(field2[j].getName())) { + field1[i].setAccessible(true); + field2[j].setAccessible(true); + // 如果field1[i]属性值与field2[j]属性值内容不相同 + if (!compareTwo(field1[i].get(class1), field2[j].get(class2))) { + Map map2 = new HashMap(); + DataName name = field1[i].getAnnotation(DataName.class); + String fieldName = ""; + if (name != null) { + fieldName = name.name(); + } else { + fieldName = field1[i].getName(); + } + map2.put("name", fieldName); + map2.put("old", field1[i].get(class1)); + map2.put("new", field2[j].get(class2)); + list.add(map2); + } + break; + } + } + } + } + return list; + } + + /** + * 对比两个数据是否内容相同 + * + * @param object1 比较对象1 + * @param object2 比较对象2 + * @return boolean类型 + */ + public static boolean compareTwo(Object object1, Object object2) { + if (object1 == null && object2 == null) { + return true; + } + if (object1 == null && object2 != null) { + return false; + } + if (object1.equals(object2)) { + return true; + } + return false; + } + + public static String contrastObjByName(Class dictClass, String key, Object pojo1, Map pojo2) throws IllegalAccessException, InstantiationException { + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + String str = parseMutiKey(dictMap, key, pojo2) + ";;;"; + + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if (!"serialVersionUID".equals(field.getName())) { + String prefix = "get"; + int prefixLength = 3; + if (field.getType().getName().equals("java.lang.Boolean")) { + prefix = "is"; + prefixLength = 2; + } + + Method getMethod = null; + + try { + getMethod = clazz.getDeclaredMethod(prefix + firstCharToUpperCase(field.getName())); + } catch (NoSuchMethodException var22) { + System.err.println("this className:" + clazz.getName() + " is not methodName: " + var22.getMessage()); + continue; + } + + Object o1 = getMethod.invoke(pojo1); + Object o2 = pojo2.get(firstCharToLowerCase(getMethod.getName().substring(prefixLength))); + if (o1 != null && o2 != null) { + if (o1 instanceof Date) { + o1 = DateUtil.format(new Date(), "yyyy-MM-dd"); + } else if (o1 instanceof Integer) { + o2 = Integer.parseInt(o2.toString()); + } + + if (!o1.toString().equals(o2.toString())) { + if (i != 1) { + str = str + ";;;"; + } + + String fieldName = dictMap.get(field.getName()); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(field.getName()); + if (fieldWarpperMethodName != null) { + Object o1Warpper = DictFieldWrapperFactory.createFieldWrapper(o1, fieldWarpperMethodName); + Object o2Warpper = DictFieldWrapperFactory.createFieldWrapper(o2, fieldWarpperMethodName); + str = str + "字段名称:" + fieldName + ",旧值:" + o1Warpper + ",新值:" + o2Warpper; + } else { + str = str + "字段名称:" + fieldName + ",旧值:" + o1 + ",新值:" + o2; + } + + ++i; + } + } + } + } + } catch (Exception var23) { + var23.printStackTrace(); + } + + return str; + } + + public static String parseMutiKey(AbstractDictMap dictMap, String key, Map requests) { + StringBuilder sb = new StringBuilder(); + if (key.indexOf(",") != -1) { + String[] keys = key.split(","); + String[] var13 = keys; + int var14 = keys.length; + + for (int var7 = 0; var7 < var14; ++var7) { + String item = var13[var7].trim(); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(item); + Object value = requests.get(item); + if (fieldWarpperMethodName != null) { + Object valueWarpper = DictFieldWrapperFactory.createFieldWrapper(value, fieldWarpperMethodName); + sb.append(dictMap.get(item) + "=" + valueWarpper + ","); + } else { + sb.append(dictMap.get(item) + "=" + (ObjectUtil.isNotEmpty(value) ? value.toString() : "") + ","); + } + } + + return StrUtil.removeSuffix(sb.toString(), ","); + } else { + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(key); + Object value = requests.get(key); + if (fieldWarpperMethodName != null) { + Object valueWarpper = DictFieldWrapperFactory.createFieldWrapper(value, fieldWarpperMethodName); + sb.append(dictMap.get(key) + "=" + valueWarpper); + } else { + sb.append(dictMap.get(key) + "=" + (ObjectUtil.isNotEmpty(value) ? value.toString() : "")); + } + + return sb.toString(); + } + } + + public static String getDeleteKeys(Object pojo1) { + String str = ""; + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if ("keys".equals(field.getName())) { + PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); + Method getMethod = pd.getReadMethod(); + Object o1 = getMethod.invoke(pojo1); + return ObjectUtil.isNotEmpty(o1) ? o1.toString().replaceAll("\\[|]", "") : "".concat(",已删除"); + } + } + + } catch (Exception var21) { + var21.printStackTrace(); + } + return str; + } + + public static String contrastObj(Class dictClass, String key, Object pojo1, Map pojo2) throws IllegalAccessException, InstantiationException { + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); +// String str = parseMutiKey(dictMap, key, pojo2) + ";;;"; + String str = ""; + + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if (!"serialVersionUID".equals(field.getName())) { + PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); + Method getMethod = pd.getReadMethod(); + Object o1 = getMethod.invoke(pojo1); + Object o2 = pojo2.get(firstCharToLowerCase(getMethod.getName().substring(3))); + if (o1 != null && o2 != null) { + if (o1 instanceof Integer) { + o2 = Integer.parseInt(o2.toString()); + } else if (o1 instanceof Date) { + o1 = DateUtil.format((Date) o1, "yyyy-MM-dd HH:mm:ss"); + } + + if (!o1.toString().equals(o2.toString())) { + if (i != 1) { + str = str + ";"; + } + + String fieldName = dictMap.get(field.getName()); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(field.getName()); + if (fieldWarpperMethodName != null) { + Object o1Warpper = DictFieldWrapperFactory.createFieldWrapper(o1, fieldWarpperMethodName); + Object o2Warpper = DictFieldWrapperFactory.createFieldWrapper(o2, fieldWarpperMethodName); + str = str + fieldName + ":将【" + o1Warpper + "】,改为【" + o2Warpper + "】"; + } else { + str = str + fieldName + ":将【" + o1 + "】,改为【" + o2 + "】"; + } + + ++i; + } + } + } + } + } catch (Exception var21) { + var21.printStackTrace(); + } + + return str; + } + + +} \ No newline at end of file diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java index 7497ebf..18fd820 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java @@ -8,12 +8,14 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.StateDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.DeviceTypeDict; import com.casic.missiles.modular.device.dto.BaseDeviceTypeDTO; import com.casic.missiles.modular.device.dto.BaseDeviceTypeIdsDTO; import com.casic.missiles.modular.device.dto.SelectDTO; @@ -63,6 +65,7 @@ return ReturnUtil.success(super.packForBT(baseDeviceTypePage)); } + @OperateLog(value = "新增设备类型", key = "typeName,watchObject,isUsed,typeDescription", dict = DeviceTypeDict.class, type = "add") @ApiOperation("增加设备类型") @PostMapping("/add") @ResponseBody @@ -71,6 +74,7 @@ return ReturnUtil.success(iBaseDeviceTypeService.saveBaseDeviceType(baseDeviceType)); } + @OperateLog(value = "编辑设备类型", dict = DeviceTypeDict.class, serviceClass = IBaseDeviceTypeService.class, type = "edit") @ApiOperation("编辑设备类型") @PostMapping("/edit") @ResponseBody @@ -81,10 +85,11 @@ return ReturnUtil.success(iBaseDeviceTypeService.updateById(baseDeviceType)); } + @OperateLog(value = "删除设备类型", key = "typeName", dict = DeviceTypeDict.class, serviceClass = IBaseDeviceTypeService.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); @@ -113,7 +118,7 @@ public ReturnDTO selectList(@RequestBody BaseDeviceTypeIdsDTO request) { QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.in(request.getDeviceTypeList()!=null&&request.getDeviceTypeList().size()>0, "id", request.getDeviceTypeList()); + queryWrapper.in(request.getDeviceTypeList() != null && request.getDeviceTypeList().size() > 0, "id", request.getDeviceTypeList()); queryWrapper.eq("IS_USED", "1"); List baseDeviceTypes = iBaseDeviceTypeService.list(queryWrapper); List selectDTOS = new ArrayList<>(); 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 c8583d1..18b16e5 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 @@ -346,7 +346,7 @@ ay.ALARM_CATEGORY, ac.ALARM_LEVEL as alarmLevelName, bm.NAME AS manufactureName, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.CANCEL_TIME) as cancelDuration + TIMESTAMPDIFF(MINUTE, rd.TS, rd.CANCEL_TIME) as cancelDuration FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -377,11 +377,14 @@ lr.ledgerName, lr.DEPTID, lr.id as ledgerId, + lr.lngGaode, + lr.latGaode, + lr.type as watchObject, bd.INSTALL_DATE, ay.ALARM_CATEGORY, ac.ALARM_LEVEL as alarmLevelName, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.CANCEL_TIME) as cancelDuration, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.PROCESS_TIME) as processDuration, + TIMESTAMPDIFF(SECOND, rd.TS, rd.CANCEL_TIME) as cancelDuration, + TIMESTAMPDIFF(SECOND, rd.TS, rd.PROCESS_TIME) as processDuration, bm.`NAME` AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -541,15 +544,22 @@ - SELECT count(1) as sum,"1" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where `STATUS` ='1' - and ar.EXCEPTION_TYPE='0' + + WITH alarm_temp as (SELECT + ar.id, + ar.ts, + lr.DEPTID + FROM + `alarm_records` ar + LEFT JOIN bus_device bd ON ar.DEVCODE = bd.DEVCODE + AND bd.VALID > 0 + LEFT JOIN bus_device_ledger bl ON bd.ID = bl.DEVICE_ID + AND bl.VALID = '1' + JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID + AND lr.type = bl.type + AND lr.VALID = '1' + AND lr.ledgerCode = ar.LEDGER_CODE + WHERE + `STATUS` = '1' + AND ar.EXCEPTION_TYPE = '0'),alarms_temp as( + SELECT ar.id, ar.ts, bl.DEPTID FROM `alarm_records` ar join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.EXCEPTION_TYPE='0' + ) + SELECT count(1) as sum,"1" as type FROM alarm_temp ar + + + and ar.DEPTID in (${deptStrs}) + + + UNION ALL + SELECT count(1) as sum,"2" as type FROM alarms_temp ar where ar.TS>=CURDATE() + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"2" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>=CURDATE() - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"3" as type FROM alarms_temp ar where ar.TS>= CURDATE() - INTERVAL DAYOFWEEK(CURDATE()) - 2 DAY + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"3" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>= CURDATE() - INTERVAL DAYOFWEEK(CURDATE()) - 2 DAY - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"4" as type FROM alarms_temp ar where ar.TS>=DATE_FORMAT(NOW(),'%Y-%m-01') + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"4" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>=DATE_FORMAT(NOW(),'%Y-%m-01') - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"5" as type FROM alarms_temp ar where ar.TS>= DATE_FORMAT(CURDATE(), '%Y-01-01') + - and bl.DEPTID in (${deptStrs}) - - UNION ALL - SELECT count(1) as sum,"5" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>= DATE_FORMAT(CURDATE(), '%Y-01-01') - and ar.EXCEPTION_TYPE='0' - - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java index 3e0edd6..9dab3a7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java @@ -71,4 +71,18 @@ private Long deptid; + @ApiModelProperty("经度") + private String lngGaode; + + @ApiModelProperty("纬度") + private String latGaode; + + @ApiModelProperty("监测类型") + private String watchObject; + + @ApiModelProperty("点位id") + private Long ledgerId; + + + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java index e938da8..60464c4 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java @@ -12,6 +12,7 @@ private String deviceType; private String tagNumber; private String ledgerCode; + private String ledgerName; private String place; //台账类型 private String type; 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 ac4cabe..e623df7 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 @@ -44,6 +44,7 @@ import static cn.hutool.core.date.DateUnit.DAY; import static com.casic.missiles.util.TimeConvertUtil.TimeConverter; +import static com.casic.missiles.util.TimeConvertUtil.TimeConverterSecond; /** *

@@ -180,8 +181,8 @@ public DeviceAlarmDetailDTO deviceAlarmDetail(Long id) { DeviceAlarmDetailDTO alarmDetail = this.baseMapper.deviceAlarmDetail(id); - alarmDetail.setCancelDuration(TimeConverter(alarmDetail.getCancelDuration())); - alarmDetail.setProcessDuration(TimeConverter(alarmDetail.getProcessDuration())); + alarmDetail.setCancelDuration(TimeConverterSecond(alarmDetail.getCancelDuration())); + alarmDetail.setProcessDuration(TimeConverterSecond(alarmDetail.getProcessDuration())); alarmDetail.setDeptName(ObjectUtil.isNotEmpty(alarmDetail.getDeptid()) ? commonServer.getDeptNamesByDeptId(alarmDetail.getDeptid()) : ""); // alarmDetail.setAddress(alarmDetail.getTagNumber().concat("|").concat(alarmDetail.getLedgerName())); alarmDetail.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmDetail.getAlarmCategory())); @@ -524,16 +525,26 @@ @Override public void cancelDeviceAlarm(String devCode) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("DEVCODE", devCode); - updateWrapper.eq("EXCEPTION_TYPE", "1"); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE", devCode); + queryWrapper.eq("EXCEPTION_TYPE", "1"); //只有挂起和已处置的才消 // updateWrapper.ge("PROCESS_STATUS", "3"); - updateWrapper.eq("STATUS", "1"); - updateWrapper.set("STATUS", "0"); - updateWrapper.set("CANCEL_TIME", new Date()); - this.update(updateWrapper); - //toDo:需要加流程取消日志 + queryWrapper.eq("STATUS", "1"); + List alarmRecordsList = this.list(queryWrapper); + if (alarmRecordsList != null && alarmRecordsList.size() > 0) { + alarmRecordsList.forEach(alarmRecords -> { + alarmRecords.setStatus("0"); + alarmRecords.setCancelTime(new Date()); + alarmRecords.setPreProcessStatus(alarmRecords.getProcessStatus()); + alarmRecords.setProcessStatus(ApprovalStatusEnum.FINISHED.getCode()); + this.updateById(alarmRecords); + }); + //添加流程日志 + approvalLogMapper.insert(new ApprovalLog(alarmRecordsList.get(0).getId(), "1", + "", ApprovalStatusEnum.FINISHED.getCode(), + null)); + } } @Override @@ -674,8 +685,12 @@ AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), data.concat("%LEL"), data, - alarmRuleResponseDTO.getAlarmLevelId(),DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmLevelId(), DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmRuleResponseDTO.getAlarmTypeName(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -721,7 +736,7 @@ @Override - public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime,List busWellDTOList, + public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime, List busWellDTOList, Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { @@ -730,8 +745,12 @@ try { AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, - alarmLevelId, DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmLevelId, DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmTypeName, + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace() + , "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -793,7 +812,11 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.get().getAlarmTypeId(), alarmRuleResponseDTO.get().getAlarmTypeName(), alarmRuleResponseDTO.get().getAlarmLevelId(), DateUtil.parse(logTime), - alarmRuleResponseDTO.get().getAlarmThreshold(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "1"); + alarmRuleResponseDTO.get().getAlarmThreshold(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "1"); this.save(alarmRecords); } catch (Exception e) { e.printStackTrace(); @@ -846,8 +869,8 @@ * @param cell */ @Override - public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent,String logTime) { - this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent,DateUtil.parse(logTime)); + public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent, String logTime) { + this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent, DateUtil.parse(logTime)); } @Override @@ -903,7 +926,10 @@ offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), - offDeviceDTO.getPlace(), "1"); + ObjectUtil.isNotEmpty(offDeviceDTO.getLedgerName()) ? + offDeviceDTO.getTagNumber().concat("|"). + concat(offDeviceDTO.getLedgerName()) : + offDeviceDTO.getPlace(), "1"); alarmRecordsList.add(alarmRecords); ledgers.add(offDeviceDTO); } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java new file mode 100644 index 0000000..cb554b9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.data.dto; + + +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class PanDataDTO implements Serializable { + + private static final long serialVersionUID = 1232822221212L; + + private String dataTime; + + private String attributeType; + + private String dataValue; + + private String deviceCode; + + + +} 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 index a082d00..2a943ad 100644 --- 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 @@ -23,6 +23,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -37,6 +38,7 @@ * @author zt * @since 2025-01-22 */ +@Slf4j @RequiredArgsConstructor @Service public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { @@ -71,8 +73,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -80,8 +81,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}",devCode, e); } } @@ -141,8 +141,7 @@ } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -222,8 +221,10 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); +// e.printStackTrace(); +// log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); + } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java index dd80611..cd24860 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java @@ -83,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -124,8 +123,7 @@ busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -200,8 +198,7 @@ alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } //低电量报警处理 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 302b446..f0def39 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 @@ -76,8 +76,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -85,8 +84,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -133,8 +131,7 @@ if (i < jsonArray.size() - 1) continue; busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -217,8 +214,7 @@ } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } 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 e5ba8f7..a02af88 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataMonitorPipeOtherServiceImpl extends ServiceImpl implements IDataMonitorPipeOtherService, IDataAbstractService { @@ -73,8 +75,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -116,8 +116,7 @@ //2.写入新的报警 alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + log.error("处理报警时发生异常,devcode:{},e:{}", devCode, e); } } } @@ -160,8 +159,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmEventCode)); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -341,8 +339,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag || ObjectUtil.isNotEmpty(alarmContent) ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java index 5dc8c2b..f383690 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java @@ -2,7 +2,6 @@ import cn.hutool.core.date.DateUtil; 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; @@ -13,15 +12,20 @@ import com.casic.missiles.modular.alarm.service.IAlarmRuleService; import com.casic.missiles.modular.data.dao.DataGasMapper; import com.casic.missiles.modular.data.dao.DataPanGasMapper; +import com.casic.missiles.modular.data.dto.PanDataDTO; import com.casic.missiles.modular.data.entity.DataPanGas; import com.casic.missiles.modular.data.service.IDataPanGasService; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.CommonUtil; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonToken; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.io.IOException; import java.util.Date; import java.util.List; import java.util.Map; @@ -68,78 +72,179 @@ } - @Transactional @Override public boolean processAcceptGasData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); - JSONArray jsonArray = jsonObject.getJSONArray("data"); - String devCode = ""; - for (int i = 0; i < jsonArray.size(); i++) { - try { - devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); - if (ObjectUtil.isEmpty(devCode)) continue; - List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); - String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); - String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); - //暂只存浓度 - if ("2".equals(attributeType)) continue; - String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); - gas = String.format("%.2f", Double.valueOf(gas)); - //1.存数据 - save(DataPanGas.builder() - .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") - .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") - .deviceCode(devCode) - .concentration(gas) - .logtime(DateUtil.parseDateTime(dataTime)) - .build());//存储采集数据 - //2.有无超限处理流程(判断最后一条数据) -// if (i < jsonArray.size() - 1) continue; - - //3.清除设备告警 - alarmRecordsService.cancelDeviceAlarm(devCode); - //4.存报警 - //若没绑场站,则不产生报警 - boolean alarmFlag = false; - String bfcf = busDeviceService.getBfcf(devCode); - 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))) { - dataTime = dataTime.replaceAll("-", ""); - dataTime = dataTime.replaceAll(":", ""); - dataTime = dataTime.replaceAll("\\s+", ""); - alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); - } - break; - } - } - } - //5.清数据报警 - if (!alarmFlag) { - alarmRecordsService.cancelDataAlarm(devCode); - } - //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); - //7.更新监测井状态 (1:正常,2:报警) - if (busWellDTOList != null && busWellDTOList.size() > 0) { - alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); - } - } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + JsonFactory factory = new JsonFactory(); + try (JsonParser parser = factory.createParser(jsonObject.getString("data"))) { + // 定位到 "data" 数组 + while (parser.nextToken() != JsonToken.START_ARRAY) { + parser.nextToken(); } + // 逐条处理数据 + while (parser.nextToken() != JsonToken.END_ARRAY) { + if (parser.getCurrentToken() == JsonToken.START_OBJECT) { + processSingleData(parseJsonObject(parser)); + } + + } + } catch (IOException e) { + e.printStackTrace(); } + return true; } + private PanDataDTO parseJsonObject(JsonParser parser) throws IOException { + PanDataDTO panDataDTO = new PanDataDTO(); + while (parser.nextToken() != JsonToken.END_OBJECT) { + String fieldName = parser.getCurrentName(); + if ("dataTime".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataTime(parser.getText()); + } else if ("attributeType".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setAttributeType(parser.getText()); + } else if ("dataValue".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataValue(parser.getText()); + } else if ("deviceCode".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDeviceCode(parser.getText()); + } + } + return panDataDTO; + } + + + private void processSingleData(PanDataDTO panDataDTO) { + try { + String devCode = panDataDTO.getDeviceCode(); + if (ObjectUtil.isEmpty(devCode)) return; + List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); + String gas = panDataDTO.getDataValue(); + String attributeType = panDataDTO.getAttributeType(); + //暂只存浓度 + if ("2".equals(attributeType)) return; + String dataTime = panDataDTO.getDataTime(); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataPanGas.builder() + .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .deviceCode(devCode) + .concentration(gas) + .logtime(DateUtil.parseDateTime(dataTime)) + .build());//存储采集数据 + + boolean alarmFlag = false; + String bfcf = busDeviceService.getBfcf(devCode); + 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))) { +// dataTime = dataTime.replaceAll("-", ""); +// dataTime = dataTime.replaceAll(":", ""); +// dataTime = dataTime.replaceAll("\\s+", ""); + alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); + //7.更新监测井状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + log.error("处理云台数据时发生异常,devcode:{},data:{},e:{}", panDataDTO.getDeviceCode(), panDataDTO.toString(), e); + } + } + + +// @Transactional +// @Override +// public boolean processAcceptGasData(Map dataParams) { +// JSONObject jsonObject = new JSONObject(dataParams); +// JSONArray jsonArray = jsonObject.getJSONArray("data"); +// String devCode = ""; +// for (int i = 0; i < jsonArray.size(); i++) { +// try { +// devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); +// if (ObjectUtil.isEmpty(devCode)) continue; +// List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); +// String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); +// String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); +// //暂只存浓度 +// if ("2".equals(attributeType)) continue; +// String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); +// gas = String.format("%.2f", Double.valueOf(gas)); +// //1.存数据 +// save(DataPanGas.builder() +// .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") +// .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") +// .deviceCode(devCode) +// .concentration(gas) +// .logtime(DateUtil.parseDateTime(dataTime)) +// .build());//存储采集数据 +// //2.有无超限处理流程(判断最后一条数据) +//// if (i < jsonArray.size() - 1) continue; +// +// //3.清除设备告警 +//// alarmRecordsService.cancelDeviceAlarm(devCode); +// //4.存报警 +// //若没绑场站,则不产生报警 +// boolean alarmFlag = false; +// String bfcf = busDeviceService.getBfcf(devCode); +// 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))) { +//// dataTime = dataTime.replaceAll("-", ""); +//// dataTime = dataTime.replaceAll(":", ""); +//// dataTime = dataTime.replaceAll("\\s+", ""); +// alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); +// } +// break; +// } +// } +// } +// //5.清数据报警 +// if (!alarmFlag) { +// alarmRecordsService.cancelDataAlarm(devCode); +// } +// //6.更新电量及状态 (1:正常,2:报警) +// alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); +// //7.更新监测井状态 (1:正常,2:报警) +// if (busWellDTOList != null && busWellDTOList.size() > 0) { +// alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); +// } +// } catch (Exception e) { +// log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); +// } +// } +// return true; +// } + @Override public boolean acceptAlarmData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); 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 37d731d..a17953b 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataTubeOtherServiceImpl extends ServiceImpl implements IDataTubeOtherService, IDataAbstractService { @@ -73,7 +75,7 @@ } } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,7 +84,7 @@ imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -122,8 +124,8 @@ } //特殊处理消警 if ("CancelWaterImmersionAlarm".equals(alarmType)) { - if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { - alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + if (alarmRecordsService.isWatchAlarms(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelWatchAlarms(devCode, "WaterImmersionAlarm"); } continue; } @@ -146,8 +148,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmType)); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -227,8 +228,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java new file mode 100644 index 0000000..3be65dd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java @@ -0,0 +1,170 @@ +package com.casic.missiles.modular.aop; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.aop.annotion.ReflectionUtils; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.modular.interfaces.log.LogManager; +import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.Serializable; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Aspect +@Component +public class OperateLogAspect { + private Logger log = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private ApplicationContext applicationContext; + + public static volatile Map oldMap = new HashMap<>(); + + public OperateLogAspect() { + } + + @Pointcut("@annotation(com.casic.missiles.modular.aop.annotion.OperateLog)") + public void cutService() { + } + + @Around("cutService()") + public Object recordSysLog(ProceedingJoinPoint point) throws Throwable { + Object result = point.proceed(); + + try { + this.handle(point); + } catch (Exception var4) { + this.log.error("日志记录出错!", var4); + } + + return result; + } + + /** + * 处理请求前执行 + */ + @Before(value = "@annotation(operateLog)") + public void boBefore(JoinPoint joinPoint, OperateLog operateLog) { + Object info = joinPoint.getArgs()[0]; + if ("edit".equals(operateLog.type()) && operateLog.needDefaultCompare()) { + Class cls = operateLog.serviceClass(); + IService service = (IService) applicationContext.getBean(cls); + Object result; + if (service instanceof IBusDeviceService) { + result = ((IBusDeviceService) service).getByDeviceId((Long) ReflectionUtils.getFieldValue(info, "id")); + } else + result = service.getById((Serializable) ReflectionUtils.getFieldValue(info, "id")); + oldMap = (Map) objectToMap(result); // 存储修改前的对象 + } + } + + private void handle(ProceedingJoinPoint point) throws Exception { + Signature sig = point.getSignature(); + MethodSignature msig = null; + if (!(sig instanceof MethodSignature)) { + throw new IllegalArgumentException("该注解只能用于方法"); + } else { + msig = (MethodSignature) sig; + Object target = point.getTarget(); + Method currentMethod = target.getClass().getMethod(msig.getName(), msig.getParameterTypes()); + String methodName = currentMethod.getName(); + AuthUser user = ShiroKit.getUser(); + if (null != user) { + String className = point.getTarget().getClass().getName(); + Object[] params = point.getArgs(); + OperateLog annotation = (OperateLog) currentMethod.getAnnotation(OperateLog.class); + String bussinessName = annotation.value(); + String key = annotation.key(); + Class dictClass = annotation.dict(); + String sb = argsArrayToString(params); + String msg = sb; + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + if ("add".equals(annotation.type())) { + Map parameters = (Map) objectToMap(params[0]); + msg = CollectionUtils.isEmpty(parameters) ? sb : ReflectionUtils.parseMutiKey(dictMap, key, parameters); + } else if ("edit".equals(annotation.type())) { + msg = CollectionUtils.isEmpty(oldMap) ? sb : ReflectionUtils.contrastObj(dictClass, key, params[0], oldMap); + }else if("delete".equals(annotation.type())){ + msg=dictMap.get(annotation.key())+":"+ReflectionUtils.getDeleteKeys(params[0]); + } + LogManager.me().executeLog(LogTaskFactory.bussinessLog(user.getId(), bussinessName, className, methodName, msg)); + } + } + } + + + /** + * 参数拼装 + */ + private String argsArrayToString(Object[] paramsArray) { + Gson gson = new GsonBuilder().create(); + String params = ""; + if (paramsArray != null && paramsArray.length > 0) { + for (int i = 0; i < paramsArray.length; i++) { + if (!isFilterObject(paramsArray[i])) { + params += gson.toJson(paramsArray[i]) + " & "; + } + } + } + return params.trim(); + } + + + /** + * 判断是否需要过滤的对象。 + * + * @param o 对象信息。 + * @return 如果是需要过滤的对象,则返回true;否则返回false。 + */ + public boolean isFilterObject(final Object o) { + return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse; + } + + private Map objectToMap(Object obj) { + if (obj == null) { + return null; + } + ObjectMapper mapper = new ObjectMapper(); + mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + // 如果使用JPA请自己打开这条配置 + // mapper.addMixIn(Object.class, IgnoreHibernatePropertiesInJackson.class); + Map mappedObject = mapper.convertValue(obj, Map.class); + return mappedObject; + + + } +} + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java new file mode 100644 index 0000000..77afa9c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.aop.annotion; + +import java.lang.annotation.*; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.FIELD}) +@Documented +public @interface DataName { + String name() default ""; // 字段名称 + + /** + * 读取枚举内容转义表达式 (如: 0=男,1=女,2=未知) + */ + String readConverterExp() default ""; +} + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java new file mode 100644 index 0000000..f1f59ad --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.aop.annotion; + + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.common.constant.dictmap.base.SystemDict; + +import java.lang.annotation.*; + +@Inherited +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.METHOD}) +public @interface OperateLog { + String value() default ""; + + String key() default "id"; + + Class serviceClass() default IService.class; + + // 是否需要比较新旧数据 + boolean needDefaultCompare() default true; + + //操作类型 add update delete + String type() default "update"; + + Class dict() default SystemDict.class; +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java new file mode 100644 index 0000000..eb773ad --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java @@ -0,0 +1,328 @@ +package com.casic.missiles.modular.aop.annotion; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.modular.interfaces.dictmap.factory.DictFieldWrapperFactory; +import lombok.extern.slf4j.Slf4j; + +import java.beans.PropertyDescriptor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.*; + +import static com.casic.missiles.modular.interfaces.utils.Contrast.firstCharToLowerCase; +import static com.casic.missiles.modular.interfaces.utils.Contrast.firstCharToUpperCase; + +@Slf4j +public class ReflectionUtils { + + /** + * 直接读取对象属性值, 无视private/protected修饰符, 不经过getter函数. + * + * @param obj 读取的对象 + * @param fieldName 读取的列 + * @return 属性值 + */ + public static Object getFieldValue(final Object obj, final String fieldName) { + Field field = getAccessibleField(obj, fieldName); + if (field == null) { + throw new IllegalArgumentException("Could not find field [" + fieldName + "] on target [" + obj + "]"); + } + + Object result = null; + try { + result = field.get(obj); + } catch (IllegalAccessException e) { + log.error("不可能抛出的异常{}", e.getMessage()); + e.printStackTrace(); + } + return result; + } + + /** + * 循环向上转型, 获取对象的DeclaredField, 并强制设置为可访问.如向上转型到Object仍无法找到, 返回null. + * + * @param obj 查找的对象 + * @param fieldName 列名 + * @return 列 + */ + public static Field getAccessibleField(final Object obj, final String fieldName) { + for (Class superClass = obj.getClass(); superClass != Object.class; superClass = superClass.getSuperclass()) { + try { + Field field = superClass.getDeclaredField(fieldName); + makeAccessible(field); + return field; + } catch (NoSuchFieldException e) { // NOSONAR + // Field不在当前类定义,继续向上转型 + e.printStackTrace(); + continue; // new add + } + } + return null; + } + + /** + * 改变private/protected的成员变量为public,尽量不调用实际改动的语句,避免JDK的SecurityManager抱怨。 + * + * @param + */ + public static void makeAccessible(Field field) { + if ((!Modifier.isPublic(field.getModifiers()) || !Modifier.isPublic(field.getDeclaringClass().getModifiers()) || Modifier + .isFinal(field.getModifiers())) && !field.isAccessible()) { + field.setAccessible(true); + } + } + + /** + * 获取两个对象同名属性内容不相同的列表 + * + * @param class1 old对象 + * @param class2 new对象 + * @return 区别列表 + * @throws ClassNotFoundException 异常 + * @throws IllegalAccessException 异常 + */ + public static List> compareTwoClass(Object class1, Object class2) throws ClassNotFoundException, IllegalAccessException { + List> list = new ArrayList>(); + // 获取对象的class + Class clazz1 = class1.getClass(); + Class clazz2 = class2.getClass(); + // 获取对象的属性列表 + Field[] field1 = clazz1.getDeclaredFields(); + Field[] field2 = clazz2.getDeclaredFields(); + StringBuilder sb = new StringBuilder(); + // 遍历属性列表field1 + for (int i = 0; i < field1.length; i++) { + // 遍历属性列表field2 + for (int j = 0; j < field2.length; j++) { + // 如果field1[i]属性名与field2[j]属性名内容相同 + if (field1[i].getName().equals(field2[j].getName())) { + if (field1[i].getName().equals(field2[j].getName())) { + field1[i].setAccessible(true); + field2[j].setAccessible(true); + // 如果field1[i]属性值与field2[j]属性值内容不相同 + if (!compareTwo(field1[i].get(class1), field2[j].get(class2))) { + Map map2 = new HashMap(); + DataName name = field1[i].getAnnotation(DataName.class); + String fieldName = ""; + if (name != null) { + fieldName = name.name(); + } else { + fieldName = field1[i].getName(); + } + map2.put("name", fieldName); + map2.put("old", field1[i].get(class1)); + map2.put("new", field2[j].get(class2)); + list.add(map2); + } + break; + } + } + } + } + return list; + } + + /** + * 对比两个数据是否内容相同 + * + * @param object1 比较对象1 + * @param object2 比较对象2 + * @return boolean类型 + */ + public static boolean compareTwo(Object object1, Object object2) { + if (object1 == null && object2 == null) { + return true; + } + if (object1 == null && object2 != null) { + return false; + } + if (object1.equals(object2)) { + return true; + } + return false; + } + + public static String contrastObjByName(Class dictClass, String key, Object pojo1, Map pojo2) throws IllegalAccessException, InstantiationException { + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + String str = parseMutiKey(dictMap, key, pojo2) + ";;;"; + + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if (!"serialVersionUID".equals(field.getName())) { + String prefix = "get"; + int prefixLength = 3; + if (field.getType().getName().equals("java.lang.Boolean")) { + prefix = "is"; + prefixLength = 2; + } + + Method getMethod = null; + + try { + getMethod = clazz.getDeclaredMethod(prefix + firstCharToUpperCase(field.getName())); + } catch (NoSuchMethodException var22) { + System.err.println("this className:" + clazz.getName() + " is not methodName: " + var22.getMessage()); + continue; + } + + Object o1 = getMethod.invoke(pojo1); + Object o2 = pojo2.get(firstCharToLowerCase(getMethod.getName().substring(prefixLength))); + if (o1 != null && o2 != null) { + if (o1 instanceof Date) { + o1 = DateUtil.format(new Date(), "yyyy-MM-dd"); + } else if (o1 instanceof Integer) { + o2 = Integer.parseInt(o2.toString()); + } + + if (!o1.toString().equals(o2.toString())) { + if (i != 1) { + str = str + ";;;"; + } + + String fieldName = dictMap.get(field.getName()); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(field.getName()); + if (fieldWarpperMethodName != null) { + Object o1Warpper = DictFieldWrapperFactory.createFieldWrapper(o1, fieldWarpperMethodName); + Object o2Warpper = DictFieldWrapperFactory.createFieldWrapper(o2, fieldWarpperMethodName); + str = str + "字段名称:" + fieldName + ",旧值:" + o1Warpper + ",新值:" + o2Warpper; + } else { + str = str + "字段名称:" + fieldName + ",旧值:" + o1 + ",新值:" + o2; + } + + ++i; + } + } + } + } + } catch (Exception var23) { + var23.printStackTrace(); + } + + return str; + } + + public static String parseMutiKey(AbstractDictMap dictMap, String key, Map requests) { + StringBuilder sb = new StringBuilder(); + if (key.indexOf(",") != -1) { + String[] keys = key.split(","); + String[] var13 = keys; + int var14 = keys.length; + + for (int var7 = 0; var7 < var14; ++var7) { + String item = var13[var7].trim(); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(item); + Object value = requests.get(item); + if (fieldWarpperMethodName != null) { + Object valueWarpper = DictFieldWrapperFactory.createFieldWrapper(value, fieldWarpperMethodName); + sb.append(dictMap.get(item) + "=" + valueWarpper + ","); + } else { + sb.append(dictMap.get(item) + "=" + (ObjectUtil.isNotEmpty(value) ? value.toString() : "") + ","); + } + } + + return StrUtil.removeSuffix(sb.toString(), ","); + } else { + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(key); + Object value = requests.get(key); + if (fieldWarpperMethodName != null) { + Object valueWarpper = DictFieldWrapperFactory.createFieldWrapper(value, fieldWarpperMethodName); + sb.append(dictMap.get(key) + "=" + valueWarpper); + } else { + sb.append(dictMap.get(key) + "=" + (ObjectUtil.isNotEmpty(value) ? value.toString() : "")); + } + + return sb.toString(); + } + } + + public static String getDeleteKeys(Object pojo1) { + String str = ""; + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if ("keys".equals(field.getName())) { + PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); + Method getMethod = pd.getReadMethod(); + Object o1 = getMethod.invoke(pojo1); + return ObjectUtil.isNotEmpty(o1) ? o1.toString().replaceAll("\\[|]", "") : "".concat(",已删除"); + } + } + + } catch (Exception var21) { + var21.printStackTrace(); + } + return str; + } + + public static String contrastObj(Class dictClass, String key, Object pojo1, Map pojo2) throws IllegalAccessException, InstantiationException { + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); +// String str = parseMutiKey(dictMap, key, pojo2) + ";;;"; + String str = ""; + + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if (!"serialVersionUID".equals(field.getName())) { + PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); + Method getMethod = pd.getReadMethod(); + Object o1 = getMethod.invoke(pojo1); + Object o2 = pojo2.get(firstCharToLowerCase(getMethod.getName().substring(3))); + if (o1 != null && o2 != null) { + if (o1 instanceof Integer) { + o2 = Integer.parseInt(o2.toString()); + } else if (o1 instanceof Date) { + o1 = DateUtil.format((Date) o1, "yyyy-MM-dd HH:mm:ss"); + } + + if (!o1.toString().equals(o2.toString())) { + if (i != 1) { + str = str + ";"; + } + + String fieldName = dictMap.get(field.getName()); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(field.getName()); + if (fieldWarpperMethodName != null) { + Object o1Warpper = DictFieldWrapperFactory.createFieldWrapper(o1, fieldWarpperMethodName); + Object o2Warpper = DictFieldWrapperFactory.createFieldWrapper(o2, fieldWarpperMethodName); + str = str + fieldName + ":将【" + o1Warpper + "】,改为【" + o2Warpper + "】"; + } else { + str = str + fieldName + ":将【" + o1 + "】,改为【" + o2 + "】"; + } + + ++i; + } + } + } + } + } catch (Exception var21) { + var21.printStackTrace(); + } + + return str; + } + + +} \ No newline at end of file diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java index 7497ebf..18fd820 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java @@ -8,12 +8,14 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.StateDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.DeviceTypeDict; import com.casic.missiles.modular.device.dto.BaseDeviceTypeDTO; import com.casic.missiles.modular.device.dto.BaseDeviceTypeIdsDTO; import com.casic.missiles.modular.device.dto.SelectDTO; @@ -63,6 +65,7 @@ return ReturnUtil.success(super.packForBT(baseDeviceTypePage)); } + @OperateLog(value = "新增设备类型", key = "typeName,watchObject,isUsed,typeDescription", dict = DeviceTypeDict.class, type = "add") @ApiOperation("增加设备类型") @PostMapping("/add") @ResponseBody @@ -71,6 +74,7 @@ return ReturnUtil.success(iBaseDeviceTypeService.saveBaseDeviceType(baseDeviceType)); } + @OperateLog(value = "编辑设备类型", dict = DeviceTypeDict.class, serviceClass = IBaseDeviceTypeService.class, type = "edit") @ApiOperation("编辑设备类型") @PostMapping("/edit") @ResponseBody @@ -81,10 +85,11 @@ return ReturnUtil.success(iBaseDeviceTypeService.updateById(baseDeviceType)); } + @OperateLog(value = "删除设备类型", key = "typeName", dict = DeviceTypeDict.class, serviceClass = IBaseDeviceTypeService.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); @@ -113,7 +118,7 @@ public ReturnDTO selectList(@RequestBody BaseDeviceTypeIdsDTO request) { QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.in(request.getDeviceTypeList()!=null&&request.getDeviceTypeList().size()>0, "id", request.getDeviceTypeList()); + queryWrapper.in(request.getDeviceTypeList() != null && request.getDeviceTypeList().size() > 0, "id", request.getDeviceTypeList()); queryWrapper.eq("IS_USED", "1"); List baseDeviceTypes = iBaseDeviceTypeService.list(queryWrapper); List selectDTOS = new ArrayList<>(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java index 42d752d..54944e2 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java @@ -3,14 +3,15 @@ import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.IdDTO; -import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.ProductDict; import com.casic.missiles.modular.device.dto.BaseProductDTO; import com.casic.missiles.modular.device.dto.SelectProductDTO; import com.casic.missiles.modular.device.entity.BaseProduct; @@ -21,7 +22,6 @@ import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; -import java.util.List; import java.util.Objects; /** @@ -49,6 +49,7 @@ return ReturnUtil.success(super.packForBT(iBaseProductService.pageList(page, requestDTO))); } + @OperateLog(value = "新增产品", key = "productName,deviceType,deviceModel,manufacturerId,protocol,accessMethod,powerSupplyMode,dataService", dict = ProductDict.class, type = "add") @ApiOperation("新增") @PostMapping("/add") @ResponseBody @@ -58,6 +59,7 @@ } + @OperateLog(value = "编辑产品", dict = ProductDict.class, serviceClass = IBaseProductService.class, type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -68,10 +70,11 @@ return ReturnUtil.success(iBaseProductService.updateBaseProductById(baseProduct)); } + @OperateLog(value = "删除产品", key = "productName", dict = ProductDict.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 c8583d1..18b16e5 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 @@ -346,7 +346,7 @@ ay.ALARM_CATEGORY, ac.ALARM_LEVEL as alarmLevelName, bm.NAME AS manufactureName, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.CANCEL_TIME) as cancelDuration + TIMESTAMPDIFF(MINUTE, rd.TS, rd.CANCEL_TIME) as cancelDuration FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -377,11 +377,14 @@ lr.ledgerName, lr.DEPTID, lr.id as ledgerId, + lr.lngGaode, + lr.latGaode, + lr.type as watchObject, bd.INSTALL_DATE, ay.ALARM_CATEGORY, ac.ALARM_LEVEL as alarmLevelName, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.CANCEL_TIME) as cancelDuration, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.PROCESS_TIME) as processDuration, + TIMESTAMPDIFF(SECOND, rd.TS, rd.CANCEL_TIME) as cancelDuration, + TIMESTAMPDIFF(SECOND, rd.TS, rd.PROCESS_TIME) as processDuration, bm.`NAME` AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -541,15 +544,22 @@ - SELECT count(1) as sum,"1" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where `STATUS` ='1' - and ar.EXCEPTION_TYPE='0' + + WITH alarm_temp as (SELECT + ar.id, + ar.ts, + lr.DEPTID + FROM + `alarm_records` ar + LEFT JOIN bus_device bd ON ar.DEVCODE = bd.DEVCODE + AND bd.VALID > 0 + LEFT JOIN bus_device_ledger bl ON bd.ID = bl.DEVICE_ID + AND bl.VALID = '1' + JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID + AND lr.type = bl.type + AND lr.VALID = '1' + AND lr.ledgerCode = ar.LEDGER_CODE + WHERE + `STATUS` = '1' + AND ar.EXCEPTION_TYPE = '0'),alarms_temp as( + SELECT ar.id, ar.ts, bl.DEPTID FROM `alarm_records` ar join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.EXCEPTION_TYPE='0' + ) + SELECT count(1) as sum,"1" as type FROM alarm_temp ar + + + and ar.DEPTID in (${deptStrs}) + + + UNION ALL + SELECT count(1) as sum,"2" as type FROM alarms_temp ar where ar.TS>=CURDATE() + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"2" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>=CURDATE() - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"3" as type FROM alarms_temp ar where ar.TS>= CURDATE() - INTERVAL DAYOFWEEK(CURDATE()) - 2 DAY + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"3" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>= CURDATE() - INTERVAL DAYOFWEEK(CURDATE()) - 2 DAY - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"4" as type FROM alarms_temp ar where ar.TS>=DATE_FORMAT(NOW(),'%Y-%m-01') + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"4" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>=DATE_FORMAT(NOW(),'%Y-%m-01') - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"5" as type FROM alarms_temp ar where ar.TS>= DATE_FORMAT(CURDATE(), '%Y-01-01') + - and bl.DEPTID in (${deptStrs}) - - UNION ALL - SELECT count(1) as sum,"5" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>= DATE_FORMAT(CURDATE(), '%Y-01-01') - and ar.EXCEPTION_TYPE='0' - - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java index 3e0edd6..9dab3a7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java @@ -71,4 +71,18 @@ private Long deptid; + @ApiModelProperty("经度") + private String lngGaode; + + @ApiModelProperty("纬度") + private String latGaode; + + @ApiModelProperty("监测类型") + private String watchObject; + + @ApiModelProperty("点位id") + private Long ledgerId; + + + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java index e938da8..60464c4 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java @@ -12,6 +12,7 @@ private String deviceType; private String tagNumber; private String ledgerCode; + private String ledgerName; private String place; //台账类型 private String type; 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 ac4cabe..e623df7 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 @@ -44,6 +44,7 @@ import static cn.hutool.core.date.DateUnit.DAY; import static com.casic.missiles.util.TimeConvertUtil.TimeConverter; +import static com.casic.missiles.util.TimeConvertUtil.TimeConverterSecond; /** *

@@ -180,8 +181,8 @@ public DeviceAlarmDetailDTO deviceAlarmDetail(Long id) { DeviceAlarmDetailDTO alarmDetail = this.baseMapper.deviceAlarmDetail(id); - alarmDetail.setCancelDuration(TimeConverter(alarmDetail.getCancelDuration())); - alarmDetail.setProcessDuration(TimeConverter(alarmDetail.getProcessDuration())); + alarmDetail.setCancelDuration(TimeConverterSecond(alarmDetail.getCancelDuration())); + alarmDetail.setProcessDuration(TimeConverterSecond(alarmDetail.getProcessDuration())); alarmDetail.setDeptName(ObjectUtil.isNotEmpty(alarmDetail.getDeptid()) ? commonServer.getDeptNamesByDeptId(alarmDetail.getDeptid()) : ""); // alarmDetail.setAddress(alarmDetail.getTagNumber().concat("|").concat(alarmDetail.getLedgerName())); alarmDetail.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmDetail.getAlarmCategory())); @@ -524,16 +525,26 @@ @Override public void cancelDeviceAlarm(String devCode) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("DEVCODE", devCode); - updateWrapper.eq("EXCEPTION_TYPE", "1"); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE", devCode); + queryWrapper.eq("EXCEPTION_TYPE", "1"); //只有挂起和已处置的才消 // updateWrapper.ge("PROCESS_STATUS", "3"); - updateWrapper.eq("STATUS", "1"); - updateWrapper.set("STATUS", "0"); - updateWrapper.set("CANCEL_TIME", new Date()); - this.update(updateWrapper); - //toDo:需要加流程取消日志 + queryWrapper.eq("STATUS", "1"); + List alarmRecordsList = this.list(queryWrapper); + if (alarmRecordsList != null && alarmRecordsList.size() > 0) { + alarmRecordsList.forEach(alarmRecords -> { + alarmRecords.setStatus("0"); + alarmRecords.setCancelTime(new Date()); + alarmRecords.setPreProcessStatus(alarmRecords.getProcessStatus()); + alarmRecords.setProcessStatus(ApprovalStatusEnum.FINISHED.getCode()); + this.updateById(alarmRecords); + }); + //添加流程日志 + approvalLogMapper.insert(new ApprovalLog(alarmRecordsList.get(0).getId(), "1", + "", ApprovalStatusEnum.FINISHED.getCode(), + null)); + } } @Override @@ -674,8 +685,12 @@ AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), data.concat("%LEL"), data, - alarmRuleResponseDTO.getAlarmLevelId(),DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmLevelId(), DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmRuleResponseDTO.getAlarmTypeName(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -721,7 +736,7 @@ @Override - public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime,List busWellDTOList, + public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime, List busWellDTOList, Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { @@ -730,8 +745,12 @@ try { AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, - alarmLevelId, DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmLevelId, DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmTypeName, + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace() + , "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -793,7 +812,11 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.get().getAlarmTypeId(), alarmRuleResponseDTO.get().getAlarmTypeName(), alarmRuleResponseDTO.get().getAlarmLevelId(), DateUtil.parse(logTime), - alarmRuleResponseDTO.get().getAlarmThreshold(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "1"); + alarmRuleResponseDTO.get().getAlarmThreshold(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "1"); this.save(alarmRecords); } catch (Exception e) { e.printStackTrace(); @@ -846,8 +869,8 @@ * @param cell */ @Override - public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent,String logTime) { - this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent,DateUtil.parse(logTime)); + public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent, String logTime) { + this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent, DateUtil.parse(logTime)); } @Override @@ -903,7 +926,10 @@ offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), - offDeviceDTO.getPlace(), "1"); + ObjectUtil.isNotEmpty(offDeviceDTO.getLedgerName()) ? + offDeviceDTO.getTagNumber().concat("|"). + concat(offDeviceDTO.getLedgerName()) : + offDeviceDTO.getPlace(), "1"); alarmRecordsList.add(alarmRecords); ledgers.add(offDeviceDTO); } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java new file mode 100644 index 0000000..cb554b9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.data.dto; + + +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class PanDataDTO implements Serializable { + + private static final long serialVersionUID = 1232822221212L; + + private String dataTime; + + private String attributeType; + + private String dataValue; + + private String deviceCode; + + + +} 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 index a082d00..2a943ad 100644 --- 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 @@ -23,6 +23,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -37,6 +38,7 @@ * @author zt * @since 2025-01-22 */ +@Slf4j @RequiredArgsConstructor @Service public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { @@ -71,8 +73,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -80,8 +81,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}",devCode, e); } } @@ -141,8 +141,7 @@ } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -222,8 +221,10 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); +// e.printStackTrace(); +// log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); + } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java index dd80611..cd24860 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java @@ -83,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -124,8 +123,7 @@ busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -200,8 +198,7 @@ alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } //低电量报警处理 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 302b446..f0def39 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 @@ -76,8 +76,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -85,8 +84,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -133,8 +131,7 @@ if (i < jsonArray.size() - 1) continue; busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -217,8 +214,7 @@ } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } 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 e5ba8f7..a02af88 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataMonitorPipeOtherServiceImpl extends ServiceImpl implements IDataMonitorPipeOtherService, IDataAbstractService { @@ -73,8 +75,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -116,8 +116,7 @@ //2.写入新的报警 alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + log.error("处理报警时发生异常,devcode:{},e:{}", devCode, e); } } } @@ -160,8 +159,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmEventCode)); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -341,8 +339,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag || ObjectUtil.isNotEmpty(alarmContent) ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java index 5dc8c2b..f383690 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java @@ -2,7 +2,6 @@ import cn.hutool.core.date.DateUtil; 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; @@ -13,15 +12,20 @@ import com.casic.missiles.modular.alarm.service.IAlarmRuleService; import com.casic.missiles.modular.data.dao.DataGasMapper; import com.casic.missiles.modular.data.dao.DataPanGasMapper; +import com.casic.missiles.modular.data.dto.PanDataDTO; import com.casic.missiles.modular.data.entity.DataPanGas; import com.casic.missiles.modular.data.service.IDataPanGasService; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.CommonUtil; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonToken; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.io.IOException; import java.util.Date; import java.util.List; import java.util.Map; @@ -68,78 +72,179 @@ } - @Transactional @Override public boolean processAcceptGasData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); - JSONArray jsonArray = jsonObject.getJSONArray("data"); - String devCode = ""; - for (int i = 0; i < jsonArray.size(); i++) { - try { - devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); - if (ObjectUtil.isEmpty(devCode)) continue; - List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); - String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); - String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); - //暂只存浓度 - if ("2".equals(attributeType)) continue; - String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); - gas = String.format("%.2f", Double.valueOf(gas)); - //1.存数据 - save(DataPanGas.builder() - .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") - .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") - .deviceCode(devCode) - .concentration(gas) - .logtime(DateUtil.parseDateTime(dataTime)) - .build());//存储采集数据 - //2.有无超限处理流程(判断最后一条数据) -// if (i < jsonArray.size() - 1) continue; - - //3.清除设备告警 - alarmRecordsService.cancelDeviceAlarm(devCode); - //4.存报警 - //若没绑场站,则不产生报警 - boolean alarmFlag = false; - String bfcf = busDeviceService.getBfcf(devCode); - 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))) { - dataTime = dataTime.replaceAll("-", ""); - dataTime = dataTime.replaceAll(":", ""); - dataTime = dataTime.replaceAll("\\s+", ""); - alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); - } - break; - } - } - } - //5.清数据报警 - if (!alarmFlag) { - alarmRecordsService.cancelDataAlarm(devCode); - } - //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); - //7.更新监测井状态 (1:正常,2:报警) - if (busWellDTOList != null && busWellDTOList.size() > 0) { - alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); - } - } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + JsonFactory factory = new JsonFactory(); + try (JsonParser parser = factory.createParser(jsonObject.getString("data"))) { + // 定位到 "data" 数组 + while (parser.nextToken() != JsonToken.START_ARRAY) { + parser.nextToken(); } + // 逐条处理数据 + while (parser.nextToken() != JsonToken.END_ARRAY) { + if (parser.getCurrentToken() == JsonToken.START_OBJECT) { + processSingleData(parseJsonObject(parser)); + } + + } + } catch (IOException e) { + e.printStackTrace(); } + return true; } + private PanDataDTO parseJsonObject(JsonParser parser) throws IOException { + PanDataDTO panDataDTO = new PanDataDTO(); + while (parser.nextToken() != JsonToken.END_OBJECT) { + String fieldName = parser.getCurrentName(); + if ("dataTime".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataTime(parser.getText()); + } else if ("attributeType".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setAttributeType(parser.getText()); + } else if ("dataValue".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataValue(parser.getText()); + } else if ("deviceCode".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDeviceCode(parser.getText()); + } + } + return panDataDTO; + } + + + private void processSingleData(PanDataDTO panDataDTO) { + try { + String devCode = panDataDTO.getDeviceCode(); + if (ObjectUtil.isEmpty(devCode)) return; + List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); + String gas = panDataDTO.getDataValue(); + String attributeType = panDataDTO.getAttributeType(); + //暂只存浓度 + if ("2".equals(attributeType)) return; + String dataTime = panDataDTO.getDataTime(); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataPanGas.builder() + .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .deviceCode(devCode) + .concentration(gas) + .logtime(DateUtil.parseDateTime(dataTime)) + .build());//存储采集数据 + + boolean alarmFlag = false; + String bfcf = busDeviceService.getBfcf(devCode); + 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))) { +// dataTime = dataTime.replaceAll("-", ""); +// dataTime = dataTime.replaceAll(":", ""); +// dataTime = dataTime.replaceAll("\\s+", ""); + alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); + //7.更新监测井状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + log.error("处理云台数据时发生异常,devcode:{},data:{},e:{}", panDataDTO.getDeviceCode(), panDataDTO.toString(), e); + } + } + + +// @Transactional +// @Override +// public boolean processAcceptGasData(Map dataParams) { +// JSONObject jsonObject = new JSONObject(dataParams); +// JSONArray jsonArray = jsonObject.getJSONArray("data"); +// String devCode = ""; +// for (int i = 0; i < jsonArray.size(); i++) { +// try { +// devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); +// if (ObjectUtil.isEmpty(devCode)) continue; +// List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); +// String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); +// String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); +// //暂只存浓度 +// if ("2".equals(attributeType)) continue; +// String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); +// gas = String.format("%.2f", Double.valueOf(gas)); +// //1.存数据 +// save(DataPanGas.builder() +// .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") +// .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") +// .deviceCode(devCode) +// .concentration(gas) +// .logtime(DateUtil.parseDateTime(dataTime)) +// .build());//存储采集数据 +// //2.有无超限处理流程(判断最后一条数据) +//// if (i < jsonArray.size() - 1) continue; +// +// //3.清除设备告警 +//// alarmRecordsService.cancelDeviceAlarm(devCode); +// //4.存报警 +// //若没绑场站,则不产生报警 +// boolean alarmFlag = false; +// String bfcf = busDeviceService.getBfcf(devCode); +// 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))) { +//// dataTime = dataTime.replaceAll("-", ""); +//// dataTime = dataTime.replaceAll(":", ""); +//// dataTime = dataTime.replaceAll("\\s+", ""); +// alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); +// } +// break; +// } +// } +// } +// //5.清数据报警 +// if (!alarmFlag) { +// alarmRecordsService.cancelDataAlarm(devCode); +// } +// //6.更新电量及状态 (1:正常,2:报警) +// alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); +// //7.更新监测井状态 (1:正常,2:报警) +// if (busWellDTOList != null && busWellDTOList.size() > 0) { +// alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); +// } +// } catch (Exception e) { +// log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); +// } +// } +// return true; +// } + @Override public boolean acceptAlarmData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); 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 37d731d..a17953b 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataTubeOtherServiceImpl extends ServiceImpl implements IDataTubeOtherService, IDataAbstractService { @@ -73,7 +75,7 @@ } } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,7 +84,7 @@ imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -122,8 +124,8 @@ } //特殊处理消警 if ("CancelWaterImmersionAlarm".equals(alarmType)) { - if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { - alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + if (alarmRecordsService.isWatchAlarms(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelWatchAlarms(devCode, "WaterImmersionAlarm"); } continue; } @@ -146,8 +148,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmType)); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -227,8 +228,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java new file mode 100644 index 0000000..3be65dd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java @@ -0,0 +1,170 @@ +package com.casic.missiles.modular.aop; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.aop.annotion.ReflectionUtils; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.modular.interfaces.log.LogManager; +import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.Serializable; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Aspect +@Component +public class OperateLogAspect { + private Logger log = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private ApplicationContext applicationContext; + + public static volatile Map oldMap = new HashMap<>(); + + public OperateLogAspect() { + } + + @Pointcut("@annotation(com.casic.missiles.modular.aop.annotion.OperateLog)") + public void cutService() { + } + + @Around("cutService()") + public Object recordSysLog(ProceedingJoinPoint point) throws Throwable { + Object result = point.proceed(); + + try { + this.handle(point); + } catch (Exception var4) { + this.log.error("日志记录出错!", var4); + } + + return result; + } + + /** + * 处理请求前执行 + */ + @Before(value = "@annotation(operateLog)") + public void boBefore(JoinPoint joinPoint, OperateLog operateLog) { + Object info = joinPoint.getArgs()[0]; + if ("edit".equals(operateLog.type()) && operateLog.needDefaultCompare()) { + Class cls = operateLog.serviceClass(); + IService service = (IService) applicationContext.getBean(cls); + Object result; + if (service instanceof IBusDeviceService) { + result = ((IBusDeviceService) service).getByDeviceId((Long) ReflectionUtils.getFieldValue(info, "id")); + } else + result = service.getById((Serializable) ReflectionUtils.getFieldValue(info, "id")); + oldMap = (Map) objectToMap(result); // 存储修改前的对象 + } + } + + private void handle(ProceedingJoinPoint point) throws Exception { + Signature sig = point.getSignature(); + MethodSignature msig = null; + if (!(sig instanceof MethodSignature)) { + throw new IllegalArgumentException("该注解只能用于方法"); + } else { + msig = (MethodSignature) sig; + Object target = point.getTarget(); + Method currentMethod = target.getClass().getMethod(msig.getName(), msig.getParameterTypes()); + String methodName = currentMethod.getName(); + AuthUser user = ShiroKit.getUser(); + if (null != user) { + String className = point.getTarget().getClass().getName(); + Object[] params = point.getArgs(); + OperateLog annotation = (OperateLog) currentMethod.getAnnotation(OperateLog.class); + String bussinessName = annotation.value(); + String key = annotation.key(); + Class dictClass = annotation.dict(); + String sb = argsArrayToString(params); + String msg = sb; + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + if ("add".equals(annotation.type())) { + Map parameters = (Map) objectToMap(params[0]); + msg = CollectionUtils.isEmpty(parameters) ? sb : ReflectionUtils.parseMutiKey(dictMap, key, parameters); + } else if ("edit".equals(annotation.type())) { + msg = CollectionUtils.isEmpty(oldMap) ? sb : ReflectionUtils.contrastObj(dictClass, key, params[0], oldMap); + }else if("delete".equals(annotation.type())){ + msg=dictMap.get(annotation.key())+":"+ReflectionUtils.getDeleteKeys(params[0]); + } + LogManager.me().executeLog(LogTaskFactory.bussinessLog(user.getId(), bussinessName, className, methodName, msg)); + } + } + } + + + /** + * 参数拼装 + */ + private String argsArrayToString(Object[] paramsArray) { + Gson gson = new GsonBuilder().create(); + String params = ""; + if (paramsArray != null && paramsArray.length > 0) { + for (int i = 0; i < paramsArray.length; i++) { + if (!isFilterObject(paramsArray[i])) { + params += gson.toJson(paramsArray[i]) + " & "; + } + } + } + return params.trim(); + } + + + /** + * 判断是否需要过滤的对象。 + * + * @param o 对象信息。 + * @return 如果是需要过滤的对象,则返回true;否则返回false。 + */ + public boolean isFilterObject(final Object o) { + return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse; + } + + private Map objectToMap(Object obj) { + if (obj == null) { + return null; + } + ObjectMapper mapper = new ObjectMapper(); + mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + // 如果使用JPA请自己打开这条配置 + // mapper.addMixIn(Object.class, IgnoreHibernatePropertiesInJackson.class); + Map mappedObject = mapper.convertValue(obj, Map.class); + return mappedObject; + + + } +} + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java new file mode 100644 index 0000000..77afa9c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.aop.annotion; + +import java.lang.annotation.*; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.FIELD}) +@Documented +public @interface DataName { + String name() default ""; // 字段名称 + + /** + * 读取枚举内容转义表达式 (如: 0=男,1=女,2=未知) + */ + String readConverterExp() default ""; +} + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java new file mode 100644 index 0000000..f1f59ad --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.aop.annotion; + + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.common.constant.dictmap.base.SystemDict; + +import java.lang.annotation.*; + +@Inherited +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.METHOD}) +public @interface OperateLog { + String value() default ""; + + String key() default "id"; + + Class serviceClass() default IService.class; + + // 是否需要比较新旧数据 + boolean needDefaultCompare() default true; + + //操作类型 add update delete + String type() default "update"; + + Class dict() default SystemDict.class; +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java new file mode 100644 index 0000000..eb773ad --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java @@ -0,0 +1,328 @@ +package com.casic.missiles.modular.aop.annotion; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.modular.interfaces.dictmap.factory.DictFieldWrapperFactory; +import lombok.extern.slf4j.Slf4j; + +import java.beans.PropertyDescriptor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.*; + +import static com.casic.missiles.modular.interfaces.utils.Contrast.firstCharToLowerCase; +import static com.casic.missiles.modular.interfaces.utils.Contrast.firstCharToUpperCase; + +@Slf4j +public class ReflectionUtils { + + /** + * 直接读取对象属性值, 无视private/protected修饰符, 不经过getter函数. + * + * @param obj 读取的对象 + * @param fieldName 读取的列 + * @return 属性值 + */ + public static Object getFieldValue(final Object obj, final String fieldName) { + Field field = getAccessibleField(obj, fieldName); + if (field == null) { + throw new IllegalArgumentException("Could not find field [" + fieldName + "] on target [" + obj + "]"); + } + + Object result = null; + try { + result = field.get(obj); + } catch (IllegalAccessException e) { + log.error("不可能抛出的异常{}", e.getMessage()); + e.printStackTrace(); + } + return result; + } + + /** + * 循环向上转型, 获取对象的DeclaredField, 并强制设置为可访问.如向上转型到Object仍无法找到, 返回null. + * + * @param obj 查找的对象 + * @param fieldName 列名 + * @return 列 + */ + public static Field getAccessibleField(final Object obj, final String fieldName) { + for (Class superClass = obj.getClass(); superClass != Object.class; superClass = superClass.getSuperclass()) { + try { + Field field = superClass.getDeclaredField(fieldName); + makeAccessible(field); + return field; + } catch (NoSuchFieldException e) { // NOSONAR + // Field不在当前类定义,继续向上转型 + e.printStackTrace(); + continue; // new add + } + } + return null; + } + + /** + * 改变private/protected的成员变量为public,尽量不调用实际改动的语句,避免JDK的SecurityManager抱怨。 + * + * @param + */ + public static void makeAccessible(Field field) { + if ((!Modifier.isPublic(field.getModifiers()) || !Modifier.isPublic(field.getDeclaringClass().getModifiers()) || Modifier + .isFinal(field.getModifiers())) && !field.isAccessible()) { + field.setAccessible(true); + } + } + + /** + * 获取两个对象同名属性内容不相同的列表 + * + * @param class1 old对象 + * @param class2 new对象 + * @return 区别列表 + * @throws ClassNotFoundException 异常 + * @throws IllegalAccessException 异常 + */ + public static List> compareTwoClass(Object class1, Object class2) throws ClassNotFoundException, IllegalAccessException { + List> list = new ArrayList>(); + // 获取对象的class + Class clazz1 = class1.getClass(); + Class clazz2 = class2.getClass(); + // 获取对象的属性列表 + Field[] field1 = clazz1.getDeclaredFields(); + Field[] field2 = clazz2.getDeclaredFields(); + StringBuilder sb = new StringBuilder(); + // 遍历属性列表field1 + for (int i = 0; i < field1.length; i++) { + // 遍历属性列表field2 + for (int j = 0; j < field2.length; j++) { + // 如果field1[i]属性名与field2[j]属性名内容相同 + if (field1[i].getName().equals(field2[j].getName())) { + if (field1[i].getName().equals(field2[j].getName())) { + field1[i].setAccessible(true); + field2[j].setAccessible(true); + // 如果field1[i]属性值与field2[j]属性值内容不相同 + if (!compareTwo(field1[i].get(class1), field2[j].get(class2))) { + Map map2 = new HashMap(); + DataName name = field1[i].getAnnotation(DataName.class); + String fieldName = ""; + if (name != null) { + fieldName = name.name(); + } else { + fieldName = field1[i].getName(); + } + map2.put("name", fieldName); + map2.put("old", field1[i].get(class1)); + map2.put("new", field2[j].get(class2)); + list.add(map2); + } + break; + } + } + } + } + return list; + } + + /** + * 对比两个数据是否内容相同 + * + * @param object1 比较对象1 + * @param object2 比较对象2 + * @return boolean类型 + */ + public static boolean compareTwo(Object object1, Object object2) { + if (object1 == null && object2 == null) { + return true; + } + if (object1 == null && object2 != null) { + return false; + } + if (object1.equals(object2)) { + return true; + } + return false; + } + + public static String contrastObjByName(Class dictClass, String key, Object pojo1, Map pojo2) throws IllegalAccessException, InstantiationException { + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + String str = parseMutiKey(dictMap, key, pojo2) + ";;;"; + + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if (!"serialVersionUID".equals(field.getName())) { + String prefix = "get"; + int prefixLength = 3; + if (field.getType().getName().equals("java.lang.Boolean")) { + prefix = "is"; + prefixLength = 2; + } + + Method getMethod = null; + + try { + getMethod = clazz.getDeclaredMethod(prefix + firstCharToUpperCase(field.getName())); + } catch (NoSuchMethodException var22) { + System.err.println("this className:" + clazz.getName() + " is not methodName: " + var22.getMessage()); + continue; + } + + Object o1 = getMethod.invoke(pojo1); + Object o2 = pojo2.get(firstCharToLowerCase(getMethod.getName().substring(prefixLength))); + if (o1 != null && o2 != null) { + if (o1 instanceof Date) { + o1 = DateUtil.format(new Date(), "yyyy-MM-dd"); + } else if (o1 instanceof Integer) { + o2 = Integer.parseInt(o2.toString()); + } + + if (!o1.toString().equals(o2.toString())) { + if (i != 1) { + str = str + ";;;"; + } + + String fieldName = dictMap.get(field.getName()); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(field.getName()); + if (fieldWarpperMethodName != null) { + Object o1Warpper = DictFieldWrapperFactory.createFieldWrapper(o1, fieldWarpperMethodName); + Object o2Warpper = DictFieldWrapperFactory.createFieldWrapper(o2, fieldWarpperMethodName); + str = str + "字段名称:" + fieldName + ",旧值:" + o1Warpper + ",新值:" + o2Warpper; + } else { + str = str + "字段名称:" + fieldName + ",旧值:" + o1 + ",新值:" + o2; + } + + ++i; + } + } + } + } + } catch (Exception var23) { + var23.printStackTrace(); + } + + return str; + } + + public static String parseMutiKey(AbstractDictMap dictMap, String key, Map requests) { + StringBuilder sb = new StringBuilder(); + if (key.indexOf(",") != -1) { + String[] keys = key.split(","); + String[] var13 = keys; + int var14 = keys.length; + + for (int var7 = 0; var7 < var14; ++var7) { + String item = var13[var7].trim(); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(item); + Object value = requests.get(item); + if (fieldWarpperMethodName != null) { + Object valueWarpper = DictFieldWrapperFactory.createFieldWrapper(value, fieldWarpperMethodName); + sb.append(dictMap.get(item) + "=" + valueWarpper + ","); + } else { + sb.append(dictMap.get(item) + "=" + (ObjectUtil.isNotEmpty(value) ? value.toString() : "") + ","); + } + } + + return StrUtil.removeSuffix(sb.toString(), ","); + } else { + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(key); + Object value = requests.get(key); + if (fieldWarpperMethodName != null) { + Object valueWarpper = DictFieldWrapperFactory.createFieldWrapper(value, fieldWarpperMethodName); + sb.append(dictMap.get(key) + "=" + valueWarpper); + } else { + sb.append(dictMap.get(key) + "=" + (ObjectUtil.isNotEmpty(value) ? value.toString() : "")); + } + + return sb.toString(); + } + } + + public static String getDeleteKeys(Object pojo1) { + String str = ""; + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if ("keys".equals(field.getName())) { + PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); + Method getMethod = pd.getReadMethod(); + Object o1 = getMethod.invoke(pojo1); + return ObjectUtil.isNotEmpty(o1) ? o1.toString().replaceAll("\\[|]", "") : "".concat(",已删除"); + } + } + + } catch (Exception var21) { + var21.printStackTrace(); + } + return str; + } + + public static String contrastObj(Class dictClass, String key, Object pojo1, Map pojo2) throws IllegalAccessException, InstantiationException { + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); +// String str = parseMutiKey(dictMap, key, pojo2) + ";;;"; + String str = ""; + + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if (!"serialVersionUID".equals(field.getName())) { + PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); + Method getMethod = pd.getReadMethod(); + Object o1 = getMethod.invoke(pojo1); + Object o2 = pojo2.get(firstCharToLowerCase(getMethod.getName().substring(3))); + if (o1 != null && o2 != null) { + if (o1 instanceof Integer) { + o2 = Integer.parseInt(o2.toString()); + } else if (o1 instanceof Date) { + o1 = DateUtil.format((Date) o1, "yyyy-MM-dd HH:mm:ss"); + } + + if (!o1.toString().equals(o2.toString())) { + if (i != 1) { + str = str + ";"; + } + + String fieldName = dictMap.get(field.getName()); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(field.getName()); + if (fieldWarpperMethodName != null) { + Object o1Warpper = DictFieldWrapperFactory.createFieldWrapper(o1, fieldWarpperMethodName); + Object o2Warpper = DictFieldWrapperFactory.createFieldWrapper(o2, fieldWarpperMethodName); + str = str + fieldName + ":将【" + o1Warpper + "】,改为【" + o2Warpper + "】"; + } else { + str = str + fieldName + ":将【" + o1 + "】,改为【" + o2 + "】"; + } + + ++i; + } + } + } + } + } catch (Exception var21) { + var21.printStackTrace(); + } + + return str; + } + + +} \ No newline at end of file diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java index 7497ebf..18fd820 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java @@ -8,12 +8,14 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.StateDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.DeviceTypeDict; import com.casic.missiles.modular.device.dto.BaseDeviceTypeDTO; import com.casic.missiles.modular.device.dto.BaseDeviceTypeIdsDTO; import com.casic.missiles.modular.device.dto.SelectDTO; @@ -63,6 +65,7 @@ return ReturnUtil.success(super.packForBT(baseDeviceTypePage)); } + @OperateLog(value = "新增设备类型", key = "typeName,watchObject,isUsed,typeDescription", dict = DeviceTypeDict.class, type = "add") @ApiOperation("增加设备类型") @PostMapping("/add") @ResponseBody @@ -71,6 +74,7 @@ return ReturnUtil.success(iBaseDeviceTypeService.saveBaseDeviceType(baseDeviceType)); } + @OperateLog(value = "编辑设备类型", dict = DeviceTypeDict.class, serviceClass = IBaseDeviceTypeService.class, type = "edit") @ApiOperation("编辑设备类型") @PostMapping("/edit") @ResponseBody @@ -81,10 +85,11 @@ return ReturnUtil.success(iBaseDeviceTypeService.updateById(baseDeviceType)); } + @OperateLog(value = "删除设备类型", key = "typeName", dict = DeviceTypeDict.class, serviceClass = IBaseDeviceTypeService.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); @@ -113,7 +118,7 @@ public ReturnDTO selectList(@RequestBody BaseDeviceTypeIdsDTO request) { QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.in(request.getDeviceTypeList()!=null&&request.getDeviceTypeList().size()>0, "id", request.getDeviceTypeList()); + queryWrapper.in(request.getDeviceTypeList() != null && request.getDeviceTypeList().size() > 0, "id", request.getDeviceTypeList()); queryWrapper.eq("IS_USED", "1"); List baseDeviceTypes = iBaseDeviceTypeService.list(queryWrapper); List selectDTOS = new ArrayList<>(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java index 42d752d..54944e2 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java @@ -3,14 +3,15 @@ import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.IdDTO; -import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.ProductDict; import com.casic.missiles.modular.device.dto.BaseProductDTO; import com.casic.missiles.modular.device.dto.SelectProductDTO; import com.casic.missiles.modular.device.entity.BaseProduct; @@ -21,7 +22,6 @@ import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; -import java.util.List; import java.util.Objects; /** @@ -49,6 +49,7 @@ return ReturnUtil.success(super.packForBT(iBaseProductService.pageList(page, requestDTO))); } + @OperateLog(value = "新增产品", key = "productName,deviceType,deviceModel,manufacturerId,protocol,accessMethod,powerSupplyMode,dataService", dict = ProductDict.class, type = "add") @ApiOperation("新增") @PostMapping("/add") @ResponseBody @@ -58,6 +59,7 @@ } + @OperateLog(value = "编辑产品", dict = ProductDict.class, serviceClass = IBaseProductService.class, type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -68,10 +70,11 @@ return ReturnUtil.success(iBaseProductService.updateBaseProductById(baseProduct)); } + @OperateLog(value = "删除产品", key = "productName", dict = ProductDict.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 509bd7b..103acf2 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 @@ -9,6 +9,7 @@ import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; @@ -17,6 +18,7 @@ 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.aop.annotion.OperateLog; import com.casic.missiles.modular.device.dict.BusConfigDict; import com.casic.missiles.modular.device.dict.DeviceDict; import com.casic.missiles.modular.device.dto.*; @@ -65,7 +67,8 @@ } - @BussinessLog(value = "新增设备", key = "devcode,deviceName,deviceType,installDate,productId", dict = DeviceDict.class) + @OperateLog(value = "新增设备", key = "devcode,deviceType,productId," + + "valid,communicationType,simId,warrantyPeriod,tagNumber,leftLength,rightLength,", dict = DeviceDict.class,type = "add") @CacheEvict(value="busLedgersCache", key="#busDevice.getDevcode()") @ApiOperation("新增") @PostMapping("/add") @@ -75,7 +78,8 @@ } - @BussinessLog(value = "编辑设备", key = "devcode,deviceName,deviceType,installDate,productId", dict = DeviceDict.class) + @OperateLog(value = "编辑设备", key = "devcode,deviceType,installDate,productId," + + "leftLength,rightLength,communicationType,simId,warrantyPeriod", dict = DeviceDict.class,serviceClass = IBusDeviceService.class,type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -86,11 +90,12 @@ return ReturnUtil.success(iBusDeviceService.updateBusDevice(busDevice)); } + @OperateLog(value = "删除设备", key = "devcode", dict = DeviceDict.class,serviceClass = IBusDeviceService.class,type = "delete") @CacheEvict(value="busLedgersCache", allEntries = true) @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 c8583d1..18b16e5 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 @@ -346,7 +346,7 @@ ay.ALARM_CATEGORY, ac.ALARM_LEVEL as alarmLevelName, bm.NAME AS manufactureName, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.CANCEL_TIME) as cancelDuration + TIMESTAMPDIFF(MINUTE, rd.TS, rd.CANCEL_TIME) as cancelDuration FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -377,11 +377,14 @@ lr.ledgerName, lr.DEPTID, lr.id as ledgerId, + lr.lngGaode, + lr.latGaode, + lr.type as watchObject, bd.INSTALL_DATE, ay.ALARM_CATEGORY, ac.ALARM_LEVEL as alarmLevelName, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.CANCEL_TIME) as cancelDuration, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.PROCESS_TIME) as processDuration, + TIMESTAMPDIFF(SECOND, rd.TS, rd.CANCEL_TIME) as cancelDuration, + TIMESTAMPDIFF(SECOND, rd.TS, rd.PROCESS_TIME) as processDuration, bm.`NAME` AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -541,15 +544,22 @@ - SELECT count(1) as sum,"1" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where `STATUS` ='1' - and ar.EXCEPTION_TYPE='0' + + WITH alarm_temp as (SELECT + ar.id, + ar.ts, + lr.DEPTID + FROM + `alarm_records` ar + LEFT JOIN bus_device bd ON ar.DEVCODE = bd.DEVCODE + AND bd.VALID > 0 + LEFT JOIN bus_device_ledger bl ON bd.ID = bl.DEVICE_ID + AND bl.VALID = '1' + JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID + AND lr.type = bl.type + AND lr.VALID = '1' + AND lr.ledgerCode = ar.LEDGER_CODE + WHERE + `STATUS` = '1' + AND ar.EXCEPTION_TYPE = '0'),alarms_temp as( + SELECT ar.id, ar.ts, bl.DEPTID FROM `alarm_records` ar join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.EXCEPTION_TYPE='0' + ) + SELECT count(1) as sum,"1" as type FROM alarm_temp ar + + + and ar.DEPTID in (${deptStrs}) + + + UNION ALL + SELECT count(1) as sum,"2" as type FROM alarms_temp ar where ar.TS>=CURDATE() + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"2" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>=CURDATE() - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"3" as type FROM alarms_temp ar where ar.TS>= CURDATE() - INTERVAL DAYOFWEEK(CURDATE()) - 2 DAY + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"3" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>= CURDATE() - INTERVAL DAYOFWEEK(CURDATE()) - 2 DAY - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"4" as type FROM alarms_temp ar where ar.TS>=DATE_FORMAT(NOW(),'%Y-%m-01') + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"4" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>=DATE_FORMAT(NOW(),'%Y-%m-01') - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"5" as type FROM alarms_temp ar where ar.TS>= DATE_FORMAT(CURDATE(), '%Y-01-01') + - and bl.DEPTID in (${deptStrs}) - - UNION ALL - SELECT count(1) as sum,"5" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>= DATE_FORMAT(CURDATE(), '%Y-01-01') - and ar.EXCEPTION_TYPE='0' - - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java index 3e0edd6..9dab3a7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java @@ -71,4 +71,18 @@ private Long deptid; + @ApiModelProperty("经度") + private String lngGaode; + + @ApiModelProperty("纬度") + private String latGaode; + + @ApiModelProperty("监测类型") + private String watchObject; + + @ApiModelProperty("点位id") + private Long ledgerId; + + + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java index e938da8..60464c4 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java @@ -12,6 +12,7 @@ private String deviceType; private String tagNumber; private String ledgerCode; + private String ledgerName; private String place; //台账类型 private String type; 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 ac4cabe..e623df7 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 @@ -44,6 +44,7 @@ import static cn.hutool.core.date.DateUnit.DAY; import static com.casic.missiles.util.TimeConvertUtil.TimeConverter; +import static com.casic.missiles.util.TimeConvertUtil.TimeConverterSecond; /** *

@@ -180,8 +181,8 @@ public DeviceAlarmDetailDTO deviceAlarmDetail(Long id) { DeviceAlarmDetailDTO alarmDetail = this.baseMapper.deviceAlarmDetail(id); - alarmDetail.setCancelDuration(TimeConverter(alarmDetail.getCancelDuration())); - alarmDetail.setProcessDuration(TimeConverter(alarmDetail.getProcessDuration())); + alarmDetail.setCancelDuration(TimeConverterSecond(alarmDetail.getCancelDuration())); + alarmDetail.setProcessDuration(TimeConverterSecond(alarmDetail.getProcessDuration())); alarmDetail.setDeptName(ObjectUtil.isNotEmpty(alarmDetail.getDeptid()) ? commonServer.getDeptNamesByDeptId(alarmDetail.getDeptid()) : ""); // alarmDetail.setAddress(alarmDetail.getTagNumber().concat("|").concat(alarmDetail.getLedgerName())); alarmDetail.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmDetail.getAlarmCategory())); @@ -524,16 +525,26 @@ @Override public void cancelDeviceAlarm(String devCode) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("DEVCODE", devCode); - updateWrapper.eq("EXCEPTION_TYPE", "1"); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE", devCode); + queryWrapper.eq("EXCEPTION_TYPE", "1"); //只有挂起和已处置的才消 // updateWrapper.ge("PROCESS_STATUS", "3"); - updateWrapper.eq("STATUS", "1"); - updateWrapper.set("STATUS", "0"); - updateWrapper.set("CANCEL_TIME", new Date()); - this.update(updateWrapper); - //toDo:需要加流程取消日志 + queryWrapper.eq("STATUS", "1"); + List alarmRecordsList = this.list(queryWrapper); + if (alarmRecordsList != null && alarmRecordsList.size() > 0) { + alarmRecordsList.forEach(alarmRecords -> { + alarmRecords.setStatus("0"); + alarmRecords.setCancelTime(new Date()); + alarmRecords.setPreProcessStatus(alarmRecords.getProcessStatus()); + alarmRecords.setProcessStatus(ApprovalStatusEnum.FINISHED.getCode()); + this.updateById(alarmRecords); + }); + //添加流程日志 + approvalLogMapper.insert(new ApprovalLog(alarmRecordsList.get(0).getId(), "1", + "", ApprovalStatusEnum.FINISHED.getCode(), + null)); + } } @Override @@ -674,8 +685,12 @@ AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), data.concat("%LEL"), data, - alarmRuleResponseDTO.getAlarmLevelId(),DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmLevelId(), DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmRuleResponseDTO.getAlarmTypeName(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -721,7 +736,7 @@ @Override - public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime,List busWellDTOList, + public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime, List busWellDTOList, Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { @@ -730,8 +745,12 @@ try { AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, - alarmLevelId, DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmLevelId, DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmTypeName, + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace() + , "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -793,7 +812,11 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.get().getAlarmTypeId(), alarmRuleResponseDTO.get().getAlarmTypeName(), alarmRuleResponseDTO.get().getAlarmLevelId(), DateUtil.parse(logTime), - alarmRuleResponseDTO.get().getAlarmThreshold(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "1"); + alarmRuleResponseDTO.get().getAlarmThreshold(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "1"); this.save(alarmRecords); } catch (Exception e) { e.printStackTrace(); @@ -846,8 +869,8 @@ * @param cell */ @Override - public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent,String logTime) { - this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent,DateUtil.parse(logTime)); + public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent, String logTime) { + this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent, DateUtil.parse(logTime)); } @Override @@ -903,7 +926,10 @@ offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), - offDeviceDTO.getPlace(), "1"); + ObjectUtil.isNotEmpty(offDeviceDTO.getLedgerName()) ? + offDeviceDTO.getTagNumber().concat("|"). + concat(offDeviceDTO.getLedgerName()) : + offDeviceDTO.getPlace(), "1"); alarmRecordsList.add(alarmRecords); ledgers.add(offDeviceDTO); } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java new file mode 100644 index 0000000..cb554b9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.data.dto; + + +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class PanDataDTO implements Serializable { + + private static final long serialVersionUID = 1232822221212L; + + private String dataTime; + + private String attributeType; + + private String dataValue; + + private String deviceCode; + + + +} 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 index a082d00..2a943ad 100644 --- 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 @@ -23,6 +23,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -37,6 +38,7 @@ * @author zt * @since 2025-01-22 */ +@Slf4j @RequiredArgsConstructor @Service public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { @@ -71,8 +73,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -80,8 +81,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}",devCode, e); } } @@ -141,8 +141,7 @@ } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -222,8 +221,10 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); +// e.printStackTrace(); +// log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); + } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java index dd80611..cd24860 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java @@ -83,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -124,8 +123,7 @@ busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -200,8 +198,7 @@ alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } //低电量报警处理 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 302b446..f0def39 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 @@ -76,8 +76,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -85,8 +84,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -133,8 +131,7 @@ if (i < jsonArray.size() - 1) continue; busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -217,8 +214,7 @@ } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } 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 e5ba8f7..a02af88 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataMonitorPipeOtherServiceImpl extends ServiceImpl implements IDataMonitorPipeOtherService, IDataAbstractService { @@ -73,8 +75,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -116,8 +116,7 @@ //2.写入新的报警 alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + log.error("处理报警时发生异常,devcode:{},e:{}", devCode, e); } } } @@ -160,8 +159,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmEventCode)); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -341,8 +339,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag || ObjectUtil.isNotEmpty(alarmContent) ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java index 5dc8c2b..f383690 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java @@ -2,7 +2,6 @@ import cn.hutool.core.date.DateUtil; 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; @@ -13,15 +12,20 @@ import com.casic.missiles.modular.alarm.service.IAlarmRuleService; import com.casic.missiles.modular.data.dao.DataGasMapper; import com.casic.missiles.modular.data.dao.DataPanGasMapper; +import com.casic.missiles.modular.data.dto.PanDataDTO; import com.casic.missiles.modular.data.entity.DataPanGas; import com.casic.missiles.modular.data.service.IDataPanGasService; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.CommonUtil; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonToken; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.io.IOException; import java.util.Date; import java.util.List; import java.util.Map; @@ -68,78 +72,179 @@ } - @Transactional @Override public boolean processAcceptGasData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); - JSONArray jsonArray = jsonObject.getJSONArray("data"); - String devCode = ""; - for (int i = 0; i < jsonArray.size(); i++) { - try { - devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); - if (ObjectUtil.isEmpty(devCode)) continue; - List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); - String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); - String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); - //暂只存浓度 - if ("2".equals(attributeType)) continue; - String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); - gas = String.format("%.2f", Double.valueOf(gas)); - //1.存数据 - save(DataPanGas.builder() - .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") - .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") - .deviceCode(devCode) - .concentration(gas) - .logtime(DateUtil.parseDateTime(dataTime)) - .build());//存储采集数据 - //2.有无超限处理流程(判断最后一条数据) -// if (i < jsonArray.size() - 1) continue; - - //3.清除设备告警 - alarmRecordsService.cancelDeviceAlarm(devCode); - //4.存报警 - //若没绑场站,则不产生报警 - boolean alarmFlag = false; - String bfcf = busDeviceService.getBfcf(devCode); - 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))) { - dataTime = dataTime.replaceAll("-", ""); - dataTime = dataTime.replaceAll(":", ""); - dataTime = dataTime.replaceAll("\\s+", ""); - alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); - } - break; - } - } - } - //5.清数据报警 - if (!alarmFlag) { - alarmRecordsService.cancelDataAlarm(devCode); - } - //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); - //7.更新监测井状态 (1:正常,2:报警) - if (busWellDTOList != null && busWellDTOList.size() > 0) { - alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); - } - } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + JsonFactory factory = new JsonFactory(); + try (JsonParser parser = factory.createParser(jsonObject.getString("data"))) { + // 定位到 "data" 数组 + while (parser.nextToken() != JsonToken.START_ARRAY) { + parser.nextToken(); } + // 逐条处理数据 + while (parser.nextToken() != JsonToken.END_ARRAY) { + if (parser.getCurrentToken() == JsonToken.START_OBJECT) { + processSingleData(parseJsonObject(parser)); + } + + } + } catch (IOException e) { + e.printStackTrace(); } + return true; } + private PanDataDTO parseJsonObject(JsonParser parser) throws IOException { + PanDataDTO panDataDTO = new PanDataDTO(); + while (parser.nextToken() != JsonToken.END_OBJECT) { + String fieldName = parser.getCurrentName(); + if ("dataTime".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataTime(parser.getText()); + } else if ("attributeType".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setAttributeType(parser.getText()); + } else if ("dataValue".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataValue(parser.getText()); + } else if ("deviceCode".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDeviceCode(parser.getText()); + } + } + return panDataDTO; + } + + + private void processSingleData(PanDataDTO panDataDTO) { + try { + String devCode = panDataDTO.getDeviceCode(); + if (ObjectUtil.isEmpty(devCode)) return; + List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); + String gas = panDataDTO.getDataValue(); + String attributeType = panDataDTO.getAttributeType(); + //暂只存浓度 + if ("2".equals(attributeType)) return; + String dataTime = panDataDTO.getDataTime(); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataPanGas.builder() + .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .deviceCode(devCode) + .concentration(gas) + .logtime(DateUtil.parseDateTime(dataTime)) + .build());//存储采集数据 + + boolean alarmFlag = false; + String bfcf = busDeviceService.getBfcf(devCode); + 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))) { +// dataTime = dataTime.replaceAll("-", ""); +// dataTime = dataTime.replaceAll(":", ""); +// dataTime = dataTime.replaceAll("\\s+", ""); + alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); + //7.更新监测井状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + log.error("处理云台数据时发生异常,devcode:{},data:{},e:{}", panDataDTO.getDeviceCode(), panDataDTO.toString(), e); + } + } + + +// @Transactional +// @Override +// public boolean processAcceptGasData(Map dataParams) { +// JSONObject jsonObject = new JSONObject(dataParams); +// JSONArray jsonArray = jsonObject.getJSONArray("data"); +// String devCode = ""; +// for (int i = 0; i < jsonArray.size(); i++) { +// try { +// devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); +// if (ObjectUtil.isEmpty(devCode)) continue; +// List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); +// String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); +// String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); +// //暂只存浓度 +// if ("2".equals(attributeType)) continue; +// String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); +// gas = String.format("%.2f", Double.valueOf(gas)); +// //1.存数据 +// save(DataPanGas.builder() +// .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") +// .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") +// .deviceCode(devCode) +// .concentration(gas) +// .logtime(DateUtil.parseDateTime(dataTime)) +// .build());//存储采集数据 +// //2.有无超限处理流程(判断最后一条数据) +//// if (i < jsonArray.size() - 1) continue; +// +// //3.清除设备告警 +//// alarmRecordsService.cancelDeviceAlarm(devCode); +// //4.存报警 +// //若没绑场站,则不产生报警 +// boolean alarmFlag = false; +// String bfcf = busDeviceService.getBfcf(devCode); +// 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))) { +//// dataTime = dataTime.replaceAll("-", ""); +//// dataTime = dataTime.replaceAll(":", ""); +//// dataTime = dataTime.replaceAll("\\s+", ""); +// alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); +// } +// break; +// } +// } +// } +// //5.清数据报警 +// if (!alarmFlag) { +// alarmRecordsService.cancelDataAlarm(devCode); +// } +// //6.更新电量及状态 (1:正常,2:报警) +// alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); +// //7.更新监测井状态 (1:正常,2:报警) +// if (busWellDTOList != null && busWellDTOList.size() > 0) { +// alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); +// } +// } catch (Exception e) { +// log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); +// } +// } +// return true; +// } + @Override public boolean acceptAlarmData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); 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 37d731d..a17953b 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataTubeOtherServiceImpl extends ServiceImpl implements IDataTubeOtherService, IDataAbstractService { @@ -73,7 +75,7 @@ } } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,7 +84,7 @@ imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -122,8 +124,8 @@ } //特殊处理消警 if ("CancelWaterImmersionAlarm".equals(alarmType)) { - if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { - alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + if (alarmRecordsService.isWatchAlarms(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelWatchAlarms(devCode, "WaterImmersionAlarm"); } continue; } @@ -146,8 +148,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmType)); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -227,8 +228,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java new file mode 100644 index 0000000..3be65dd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java @@ -0,0 +1,170 @@ +package com.casic.missiles.modular.aop; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.aop.annotion.ReflectionUtils; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.modular.interfaces.log.LogManager; +import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.Serializable; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Aspect +@Component +public class OperateLogAspect { + private Logger log = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private ApplicationContext applicationContext; + + public static volatile Map oldMap = new HashMap<>(); + + public OperateLogAspect() { + } + + @Pointcut("@annotation(com.casic.missiles.modular.aop.annotion.OperateLog)") + public void cutService() { + } + + @Around("cutService()") + public Object recordSysLog(ProceedingJoinPoint point) throws Throwable { + Object result = point.proceed(); + + try { + this.handle(point); + } catch (Exception var4) { + this.log.error("日志记录出错!", var4); + } + + return result; + } + + /** + * 处理请求前执行 + */ + @Before(value = "@annotation(operateLog)") + public void boBefore(JoinPoint joinPoint, OperateLog operateLog) { + Object info = joinPoint.getArgs()[0]; + if ("edit".equals(operateLog.type()) && operateLog.needDefaultCompare()) { + Class cls = operateLog.serviceClass(); + IService service = (IService) applicationContext.getBean(cls); + Object result; + if (service instanceof IBusDeviceService) { + result = ((IBusDeviceService) service).getByDeviceId((Long) ReflectionUtils.getFieldValue(info, "id")); + } else + result = service.getById((Serializable) ReflectionUtils.getFieldValue(info, "id")); + oldMap = (Map) objectToMap(result); // 存储修改前的对象 + } + } + + private void handle(ProceedingJoinPoint point) throws Exception { + Signature sig = point.getSignature(); + MethodSignature msig = null; + if (!(sig instanceof MethodSignature)) { + throw new IllegalArgumentException("该注解只能用于方法"); + } else { + msig = (MethodSignature) sig; + Object target = point.getTarget(); + Method currentMethod = target.getClass().getMethod(msig.getName(), msig.getParameterTypes()); + String methodName = currentMethod.getName(); + AuthUser user = ShiroKit.getUser(); + if (null != user) { + String className = point.getTarget().getClass().getName(); + Object[] params = point.getArgs(); + OperateLog annotation = (OperateLog) currentMethod.getAnnotation(OperateLog.class); + String bussinessName = annotation.value(); + String key = annotation.key(); + Class dictClass = annotation.dict(); + String sb = argsArrayToString(params); + String msg = sb; + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + if ("add".equals(annotation.type())) { + Map parameters = (Map) objectToMap(params[0]); + msg = CollectionUtils.isEmpty(parameters) ? sb : ReflectionUtils.parseMutiKey(dictMap, key, parameters); + } else if ("edit".equals(annotation.type())) { + msg = CollectionUtils.isEmpty(oldMap) ? sb : ReflectionUtils.contrastObj(dictClass, key, params[0], oldMap); + }else if("delete".equals(annotation.type())){ + msg=dictMap.get(annotation.key())+":"+ReflectionUtils.getDeleteKeys(params[0]); + } + LogManager.me().executeLog(LogTaskFactory.bussinessLog(user.getId(), bussinessName, className, methodName, msg)); + } + } + } + + + /** + * 参数拼装 + */ + private String argsArrayToString(Object[] paramsArray) { + Gson gson = new GsonBuilder().create(); + String params = ""; + if (paramsArray != null && paramsArray.length > 0) { + for (int i = 0; i < paramsArray.length; i++) { + if (!isFilterObject(paramsArray[i])) { + params += gson.toJson(paramsArray[i]) + " & "; + } + } + } + return params.trim(); + } + + + /** + * 判断是否需要过滤的对象。 + * + * @param o 对象信息。 + * @return 如果是需要过滤的对象,则返回true;否则返回false。 + */ + public boolean isFilterObject(final Object o) { + return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse; + } + + private Map objectToMap(Object obj) { + if (obj == null) { + return null; + } + ObjectMapper mapper = new ObjectMapper(); + mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + // 如果使用JPA请自己打开这条配置 + // mapper.addMixIn(Object.class, IgnoreHibernatePropertiesInJackson.class); + Map mappedObject = mapper.convertValue(obj, Map.class); + return mappedObject; + + + } +} + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java new file mode 100644 index 0000000..77afa9c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.aop.annotion; + +import java.lang.annotation.*; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.FIELD}) +@Documented +public @interface DataName { + String name() default ""; // 字段名称 + + /** + * 读取枚举内容转义表达式 (如: 0=男,1=女,2=未知) + */ + String readConverterExp() default ""; +} + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java new file mode 100644 index 0000000..f1f59ad --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.aop.annotion; + + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.common.constant.dictmap.base.SystemDict; + +import java.lang.annotation.*; + +@Inherited +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.METHOD}) +public @interface OperateLog { + String value() default ""; + + String key() default "id"; + + Class serviceClass() default IService.class; + + // 是否需要比较新旧数据 + boolean needDefaultCompare() default true; + + //操作类型 add update delete + String type() default "update"; + + Class dict() default SystemDict.class; +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java new file mode 100644 index 0000000..eb773ad --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java @@ -0,0 +1,328 @@ +package com.casic.missiles.modular.aop.annotion; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.modular.interfaces.dictmap.factory.DictFieldWrapperFactory; +import lombok.extern.slf4j.Slf4j; + +import java.beans.PropertyDescriptor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.*; + +import static com.casic.missiles.modular.interfaces.utils.Contrast.firstCharToLowerCase; +import static com.casic.missiles.modular.interfaces.utils.Contrast.firstCharToUpperCase; + +@Slf4j +public class ReflectionUtils { + + /** + * 直接读取对象属性值, 无视private/protected修饰符, 不经过getter函数. + * + * @param obj 读取的对象 + * @param fieldName 读取的列 + * @return 属性值 + */ + public static Object getFieldValue(final Object obj, final String fieldName) { + Field field = getAccessibleField(obj, fieldName); + if (field == null) { + throw new IllegalArgumentException("Could not find field [" + fieldName + "] on target [" + obj + "]"); + } + + Object result = null; + try { + result = field.get(obj); + } catch (IllegalAccessException e) { + log.error("不可能抛出的异常{}", e.getMessage()); + e.printStackTrace(); + } + return result; + } + + /** + * 循环向上转型, 获取对象的DeclaredField, 并强制设置为可访问.如向上转型到Object仍无法找到, 返回null. + * + * @param obj 查找的对象 + * @param fieldName 列名 + * @return 列 + */ + public static Field getAccessibleField(final Object obj, final String fieldName) { + for (Class superClass = obj.getClass(); superClass != Object.class; superClass = superClass.getSuperclass()) { + try { + Field field = superClass.getDeclaredField(fieldName); + makeAccessible(field); + return field; + } catch (NoSuchFieldException e) { // NOSONAR + // Field不在当前类定义,继续向上转型 + e.printStackTrace(); + continue; // new add + } + } + return null; + } + + /** + * 改变private/protected的成员变量为public,尽量不调用实际改动的语句,避免JDK的SecurityManager抱怨。 + * + * @param + */ + public static void makeAccessible(Field field) { + if ((!Modifier.isPublic(field.getModifiers()) || !Modifier.isPublic(field.getDeclaringClass().getModifiers()) || Modifier + .isFinal(field.getModifiers())) && !field.isAccessible()) { + field.setAccessible(true); + } + } + + /** + * 获取两个对象同名属性内容不相同的列表 + * + * @param class1 old对象 + * @param class2 new对象 + * @return 区别列表 + * @throws ClassNotFoundException 异常 + * @throws IllegalAccessException 异常 + */ + public static List> compareTwoClass(Object class1, Object class2) throws ClassNotFoundException, IllegalAccessException { + List> list = new ArrayList>(); + // 获取对象的class + Class clazz1 = class1.getClass(); + Class clazz2 = class2.getClass(); + // 获取对象的属性列表 + Field[] field1 = clazz1.getDeclaredFields(); + Field[] field2 = clazz2.getDeclaredFields(); + StringBuilder sb = new StringBuilder(); + // 遍历属性列表field1 + for (int i = 0; i < field1.length; i++) { + // 遍历属性列表field2 + for (int j = 0; j < field2.length; j++) { + // 如果field1[i]属性名与field2[j]属性名内容相同 + if (field1[i].getName().equals(field2[j].getName())) { + if (field1[i].getName().equals(field2[j].getName())) { + field1[i].setAccessible(true); + field2[j].setAccessible(true); + // 如果field1[i]属性值与field2[j]属性值内容不相同 + if (!compareTwo(field1[i].get(class1), field2[j].get(class2))) { + Map map2 = new HashMap(); + DataName name = field1[i].getAnnotation(DataName.class); + String fieldName = ""; + if (name != null) { + fieldName = name.name(); + } else { + fieldName = field1[i].getName(); + } + map2.put("name", fieldName); + map2.put("old", field1[i].get(class1)); + map2.put("new", field2[j].get(class2)); + list.add(map2); + } + break; + } + } + } + } + return list; + } + + /** + * 对比两个数据是否内容相同 + * + * @param object1 比较对象1 + * @param object2 比较对象2 + * @return boolean类型 + */ + public static boolean compareTwo(Object object1, Object object2) { + if (object1 == null && object2 == null) { + return true; + } + if (object1 == null && object2 != null) { + return false; + } + if (object1.equals(object2)) { + return true; + } + return false; + } + + public static String contrastObjByName(Class dictClass, String key, Object pojo1, Map pojo2) throws IllegalAccessException, InstantiationException { + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + String str = parseMutiKey(dictMap, key, pojo2) + ";;;"; + + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if (!"serialVersionUID".equals(field.getName())) { + String prefix = "get"; + int prefixLength = 3; + if (field.getType().getName().equals("java.lang.Boolean")) { + prefix = "is"; + prefixLength = 2; + } + + Method getMethod = null; + + try { + getMethod = clazz.getDeclaredMethod(prefix + firstCharToUpperCase(field.getName())); + } catch (NoSuchMethodException var22) { + System.err.println("this className:" + clazz.getName() + " is not methodName: " + var22.getMessage()); + continue; + } + + Object o1 = getMethod.invoke(pojo1); + Object o2 = pojo2.get(firstCharToLowerCase(getMethod.getName().substring(prefixLength))); + if (o1 != null && o2 != null) { + if (o1 instanceof Date) { + o1 = DateUtil.format(new Date(), "yyyy-MM-dd"); + } else if (o1 instanceof Integer) { + o2 = Integer.parseInt(o2.toString()); + } + + if (!o1.toString().equals(o2.toString())) { + if (i != 1) { + str = str + ";;;"; + } + + String fieldName = dictMap.get(field.getName()); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(field.getName()); + if (fieldWarpperMethodName != null) { + Object o1Warpper = DictFieldWrapperFactory.createFieldWrapper(o1, fieldWarpperMethodName); + Object o2Warpper = DictFieldWrapperFactory.createFieldWrapper(o2, fieldWarpperMethodName); + str = str + "字段名称:" + fieldName + ",旧值:" + o1Warpper + ",新值:" + o2Warpper; + } else { + str = str + "字段名称:" + fieldName + ",旧值:" + o1 + ",新值:" + o2; + } + + ++i; + } + } + } + } + } catch (Exception var23) { + var23.printStackTrace(); + } + + return str; + } + + public static String parseMutiKey(AbstractDictMap dictMap, String key, Map requests) { + StringBuilder sb = new StringBuilder(); + if (key.indexOf(",") != -1) { + String[] keys = key.split(","); + String[] var13 = keys; + int var14 = keys.length; + + for (int var7 = 0; var7 < var14; ++var7) { + String item = var13[var7].trim(); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(item); + Object value = requests.get(item); + if (fieldWarpperMethodName != null) { + Object valueWarpper = DictFieldWrapperFactory.createFieldWrapper(value, fieldWarpperMethodName); + sb.append(dictMap.get(item) + "=" + valueWarpper + ","); + } else { + sb.append(dictMap.get(item) + "=" + (ObjectUtil.isNotEmpty(value) ? value.toString() : "") + ","); + } + } + + return StrUtil.removeSuffix(sb.toString(), ","); + } else { + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(key); + Object value = requests.get(key); + if (fieldWarpperMethodName != null) { + Object valueWarpper = DictFieldWrapperFactory.createFieldWrapper(value, fieldWarpperMethodName); + sb.append(dictMap.get(key) + "=" + valueWarpper); + } else { + sb.append(dictMap.get(key) + "=" + (ObjectUtil.isNotEmpty(value) ? value.toString() : "")); + } + + return sb.toString(); + } + } + + public static String getDeleteKeys(Object pojo1) { + String str = ""; + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if ("keys".equals(field.getName())) { + PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); + Method getMethod = pd.getReadMethod(); + Object o1 = getMethod.invoke(pojo1); + return ObjectUtil.isNotEmpty(o1) ? o1.toString().replaceAll("\\[|]", "") : "".concat(",已删除"); + } + } + + } catch (Exception var21) { + var21.printStackTrace(); + } + return str; + } + + public static String contrastObj(Class dictClass, String key, Object pojo1, Map pojo2) throws IllegalAccessException, InstantiationException { + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); +// String str = parseMutiKey(dictMap, key, pojo2) + ";;;"; + String str = ""; + + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if (!"serialVersionUID".equals(field.getName())) { + PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); + Method getMethod = pd.getReadMethod(); + Object o1 = getMethod.invoke(pojo1); + Object o2 = pojo2.get(firstCharToLowerCase(getMethod.getName().substring(3))); + if (o1 != null && o2 != null) { + if (o1 instanceof Integer) { + o2 = Integer.parseInt(o2.toString()); + } else if (o1 instanceof Date) { + o1 = DateUtil.format((Date) o1, "yyyy-MM-dd HH:mm:ss"); + } + + if (!o1.toString().equals(o2.toString())) { + if (i != 1) { + str = str + ";"; + } + + String fieldName = dictMap.get(field.getName()); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(field.getName()); + if (fieldWarpperMethodName != null) { + Object o1Warpper = DictFieldWrapperFactory.createFieldWrapper(o1, fieldWarpperMethodName); + Object o2Warpper = DictFieldWrapperFactory.createFieldWrapper(o2, fieldWarpperMethodName); + str = str + fieldName + ":将【" + o1Warpper + "】,改为【" + o2Warpper + "】"; + } else { + str = str + fieldName + ":将【" + o1 + "】,改为【" + o2 + "】"; + } + + ++i; + } + } + } + } + } catch (Exception var21) { + var21.printStackTrace(); + } + + return str; + } + + +} \ No newline at end of file diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java index 7497ebf..18fd820 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java @@ -8,12 +8,14 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.StateDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.DeviceTypeDict; import com.casic.missiles.modular.device.dto.BaseDeviceTypeDTO; import com.casic.missiles.modular.device.dto.BaseDeviceTypeIdsDTO; import com.casic.missiles.modular.device.dto.SelectDTO; @@ -63,6 +65,7 @@ return ReturnUtil.success(super.packForBT(baseDeviceTypePage)); } + @OperateLog(value = "新增设备类型", key = "typeName,watchObject,isUsed,typeDescription", dict = DeviceTypeDict.class, type = "add") @ApiOperation("增加设备类型") @PostMapping("/add") @ResponseBody @@ -71,6 +74,7 @@ return ReturnUtil.success(iBaseDeviceTypeService.saveBaseDeviceType(baseDeviceType)); } + @OperateLog(value = "编辑设备类型", dict = DeviceTypeDict.class, serviceClass = IBaseDeviceTypeService.class, type = "edit") @ApiOperation("编辑设备类型") @PostMapping("/edit") @ResponseBody @@ -81,10 +85,11 @@ return ReturnUtil.success(iBaseDeviceTypeService.updateById(baseDeviceType)); } + @OperateLog(value = "删除设备类型", key = "typeName", dict = DeviceTypeDict.class, serviceClass = IBaseDeviceTypeService.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); @@ -113,7 +118,7 @@ public ReturnDTO selectList(@RequestBody BaseDeviceTypeIdsDTO request) { QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.in(request.getDeviceTypeList()!=null&&request.getDeviceTypeList().size()>0, "id", request.getDeviceTypeList()); + queryWrapper.in(request.getDeviceTypeList() != null && request.getDeviceTypeList().size() > 0, "id", request.getDeviceTypeList()); queryWrapper.eq("IS_USED", "1"); List baseDeviceTypes = iBaseDeviceTypeService.list(queryWrapper); List selectDTOS = new ArrayList<>(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java index 42d752d..54944e2 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java @@ -3,14 +3,15 @@ import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.IdDTO; -import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.ProductDict; import com.casic.missiles.modular.device.dto.BaseProductDTO; import com.casic.missiles.modular.device.dto.SelectProductDTO; import com.casic.missiles.modular.device.entity.BaseProduct; @@ -21,7 +22,6 @@ import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; -import java.util.List; import java.util.Objects; /** @@ -49,6 +49,7 @@ return ReturnUtil.success(super.packForBT(iBaseProductService.pageList(page, requestDTO))); } + @OperateLog(value = "新增产品", key = "productName,deviceType,deviceModel,manufacturerId,protocol,accessMethod,powerSupplyMode,dataService", dict = ProductDict.class, type = "add") @ApiOperation("新增") @PostMapping("/add") @ResponseBody @@ -58,6 +59,7 @@ } + @OperateLog(value = "编辑产品", dict = ProductDict.class, serviceClass = IBaseProductService.class, type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -68,10 +70,11 @@ return ReturnUtil.success(iBaseProductService.updateBaseProductById(baseProduct)); } + @OperateLog(value = "删除产品", key = "productName", dict = ProductDict.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 509bd7b..103acf2 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 @@ -9,6 +9,7 @@ import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; @@ -17,6 +18,7 @@ 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.aop.annotion.OperateLog; import com.casic.missiles.modular.device.dict.BusConfigDict; import com.casic.missiles.modular.device.dict.DeviceDict; import com.casic.missiles.modular.device.dto.*; @@ -65,7 +67,8 @@ } - @BussinessLog(value = "新增设备", key = "devcode,deviceName,deviceType,installDate,productId", dict = DeviceDict.class) + @OperateLog(value = "新增设备", key = "devcode,deviceType,productId," + + "valid,communicationType,simId,warrantyPeriod,tagNumber,leftLength,rightLength,", dict = DeviceDict.class,type = "add") @CacheEvict(value="busLedgersCache", key="#busDevice.getDevcode()") @ApiOperation("新增") @PostMapping("/add") @@ -75,7 +78,8 @@ } - @BussinessLog(value = "编辑设备", key = "devcode,deviceName,deviceType,installDate,productId", dict = DeviceDict.class) + @OperateLog(value = "编辑设备", key = "devcode,deviceType,installDate,productId," + + "leftLength,rightLength,communicationType,simId,warrantyPeriod", dict = DeviceDict.class,serviceClass = IBusDeviceService.class,type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -86,11 +90,12 @@ return ReturnUtil.success(iBusDeviceService.updateBusDevice(busDevice)); } + @OperateLog(value = "删除设备", key = "devcode", dict = DeviceDict.class,serviceClass = IBusDeviceService.class,type = "delete") @CacheEvict(value="busLedgersCache", allEntries = true) @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 31de56e..6f35acd 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 @@ -4,8 +4,8 @@ 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.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.page.PageFactory; @@ -16,11 +16,8 @@ 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.BusDeviceDTO; -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.BusDevice; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.CommonUtil; @@ -53,6 +50,7 @@ private final IBusLedgerPipeService iBusLedgerPipeService; private final IBaseExportService iBaseExportService; + private final AbstractDictService abstractDictService; @ApiOperation("新建点位") @PostMapping("/addPosition") @@ -60,10 +58,10 @@ 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,"安装位号已存!!!"); + if (busLedgerPipeList != null && busLedgerPipeList.size() > 0) { + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE, "安装位号已存!!!"); } - Long id =IdUtil.getSnowflake(1,2).nextId(); + Long id = IdUtil.getSnowflake(1, 2).nextId(); busLedgerPipe.setId(id); busLedgerPipe.setLedgerCode(busLedgerPipe.getTagNumber()); busLedgerPipe.setArea(CommonUtil.getAreaCode(busLedgerPipe.getPosition())); @@ -139,7 +137,11 @@ page.setCurrent(1); page.setSize(Integer.MAX_VALUE); Page devicePage = iBusLedgerPipeService.listPage(page, busLedgerPipeRequestDTO); + List records = devicePage.getRecords(); try { + for (BusLedgerPipe busLedgerPipe : records) { + busLedgerPipe.setLocationCategory(abstractDictService.getDictNameByCode("locationType", busLedgerPipe.getLocationCategory())); + } iBaseExportService.exportExcel(response, BusLedgerPipe.class, devicePage.getRecords(), ExportEnum.LEDGER_PIPE_EXPORT.getSheetName()); } catch (Exception e) { e.printStackTrace(); 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 c8583d1..18b16e5 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 @@ -346,7 +346,7 @@ ay.ALARM_CATEGORY, ac.ALARM_LEVEL as alarmLevelName, bm.NAME AS manufactureName, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.CANCEL_TIME) as cancelDuration + TIMESTAMPDIFF(MINUTE, rd.TS, rd.CANCEL_TIME) as cancelDuration FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -377,11 +377,14 @@ lr.ledgerName, lr.DEPTID, lr.id as ledgerId, + lr.lngGaode, + lr.latGaode, + lr.type as watchObject, bd.INSTALL_DATE, ay.ALARM_CATEGORY, ac.ALARM_LEVEL as alarmLevelName, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.CANCEL_TIME) as cancelDuration, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.PROCESS_TIME) as processDuration, + TIMESTAMPDIFF(SECOND, rd.TS, rd.CANCEL_TIME) as cancelDuration, + TIMESTAMPDIFF(SECOND, rd.TS, rd.PROCESS_TIME) as processDuration, bm.`NAME` AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -541,15 +544,22 @@ - SELECT count(1) as sum,"1" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where `STATUS` ='1' - and ar.EXCEPTION_TYPE='0' + + WITH alarm_temp as (SELECT + ar.id, + ar.ts, + lr.DEPTID + FROM + `alarm_records` ar + LEFT JOIN bus_device bd ON ar.DEVCODE = bd.DEVCODE + AND bd.VALID > 0 + LEFT JOIN bus_device_ledger bl ON bd.ID = bl.DEVICE_ID + AND bl.VALID = '1' + JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID + AND lr.type = bl.type + AND lr.VALID = '1' + AND lr.ledgerCode = ar.LEDGER_CODE + WHERE + `STATUS` = '1' + AND ar.EXCEPTION_TYPE = '0'),alarms_temp as( + SELECT ar.id, ar.ts, bl.DEPTID FROM `alarm_records` ar join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.EXCEPTION_TYPE='0' + ) + SELECT count(1) as sum,"1" as type FROM alarm_temp ar + + + and ar.DEPTID in (${deptStrs}) + + + UNION ALL + SELECT count(1) as sum,"2" as type FROM alarms_temp ar where ar.TS>=CURDATE() + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"2" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>=CURDATE() - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"3" as type FROM alarms_temp ar where ar.TS>= CURDATE() - INTERVAL DAYOFWEEK(CURDATE()) - 2 DAY + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"3" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>= CURDATE() - INTERVAL DAYOFWEEK(CURDATE()) - 2 DAY - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"4" as type FROM alarms_temp ar where ar.TS>=DATE_FORMAT(NOW(),'%Y-%m-01') + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"4" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>=DATE_FORMAT(NOW(),'%Y-%m-01') - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"5" as type FROM alarms_temp ar where ar.TS>= DATE_FORMAT(CURDATE(), '%Y-01-01') + - and bl.DEPTID in (${deptStrs}) - - UNION ALL - SELECT count(1) as sum,"5" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>= DATE_FORMAT(CURDATE(), '%Y-01-01') - and ar.EXCEPTION_TYPE='0' - - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java index 3e0edd6..9dab3a7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java @@ -71,4 +71,18 @@ private Long deptid; + @ApiModelProperty("经度") + private String lngGaode; + + @ApiModelProperty("纬度") + private String latGaode; + + @ApiModelProperty("监测类型") + private String watchObject; + + @ApiModelProperty("点位id") + private Long ledgerId; + + + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java index e938da8..60464c4 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java @@ -12,6 +12,7 @@ private String deviceType; private String tagNumber; private String ledgerCode; + private String ledgerName; private String place; //台账类型 private String type; 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 ac4cabe..e623df7 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 @@ -44,6 +44,7 @@ import static cn.hutool.core.date.DateUnit.DAY; import static com.casic.missiles.util.TimeConvertUtil.TimeConverter; +import static com.casic.missiles.util.TimeConvertUtil.TimeConverterSecond; /** *

@@ -180,8 +181,8 @@ public DeviceAlarmDetailDTO deviceAlarmDetail(Long id) { DeviceAlarmDetailDTO alarmDetail = this.baseMapper.deviceAlarmDetail(id); - alarmDetail.setCancelDuration(TimeConverter(alarmDetail.getCancelDuration())); - alarmDetail.setProcessDuration(TimeConverter(alarmDetail.getProcessDuration())); + alarmDetail.setCancelDuration(TimeConverterSecond(alarmDetail.getCancelDuration())); + alarmDetail.setProcessDuration(TimeConverterSecond(alarmDetail.getProcessDuration())); alarmDetail.setDeptName(ObjectUtil.isNotEmpty(alarmDetail.getDeptid()) ? commonServer.getDeptNamesByDeptId(alarmDetail.getDeptid()) : ""); // alarmDetail.setAddress(alarmDetail.getTagNumber().concat("|").concat(alarmDetail.getLedgerName())); alarmDetail.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmDetail.getAlarmCategory())); @@ -524,16 +525,26 @@ @Override public void cancelDeviceAlarm(String devCode) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("DEVCODE", devCode); - updateWrapper.eq("EXCEPTION_TYPE", "1"); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE", devCode); + queryWrapper.eq("EXCEPTION_TYPE", "1"); //只有挂起和已处置的才消 // updateWrapper.ge("PROCESS_STATUS", "3"); - updateWrapper.eq("STATUS", "1"); - updateWrapper.set("STATUS", "0"); - updateWrapper.set("CANCEL_TIME", new Date()); - this.update(updateWrapper); - //toDo:需要加流程取消日志 + queryWrapper.eq("STATUS", "1"); + List alarmRecordsList = this.list(queryWrapper); + if (alarmRecordsList != null && alarmRecordsList.size() > 0) { + alarmRecordsList.forEach(alarmRecords -> { + alarmRecords.setStatus("0"); + alarmRecords.setCancelTime(new Date()); + alarmRecords.setPreProcessStatus(alarmRecords.getProcessStatus()); + alarmRecords.setProcessStatus(ApprovalStatusEnum.FINISHED.getCode()); + this.updateById(alarmRecords); + }); + //添加流程日志 + approvalLogMapper.insert(new ApprovalLog(alarmRecordsList.get(0).getId(), "1", + "", ApprovalStatusEnum.FINISHED.getCode(), + null)); + } } @Override @@ -674,8 +685,12 @@ AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), data.concat("%LEL"), data, - alarmRuleResponseDTO.getAlarmLevelId(),DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmLevelId(), DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmRuleResponseDTO.getAlarmTypeName(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -721,7 +736,7 @@ @Override - public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime,List busWellDTOList, + public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime, List busWellDTOList, Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { @@ -730,8 +745,12 @@ try { AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, - alarmLevelId, DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmLevelId, DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmTypeName, + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace() + , "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -793,7 +812,11 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.get().getAlarmTypeId(), alarmRuleResponseDTO.get().getAlarmTypeName(), alarmRuleResponseDTO.get().getAlarmLevelId(), DateUtil.parse(logTime), - alarmRuleResponseDTO.get().getAlarmThreshold(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "1"); + alarmRuleResponseDTO.get().getAlarmThreshold(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "1"); this.save(alarmRecords); } catch (Exception e) { e.printStackTrace(); @@ -846,8 +869,8 @@ * @param cell */ @Override - public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent,String logTime) { - this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent,DateUtil.parse(logTime)); + public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent, String logTime) { + this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent, DateUtil.parse(logTime)); } @Override @@ -903,7 +926,10 @@ offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), - offDeviceDTO.getPlace(), "1"); + ObjectUtil.isNotEmpty(offDeviceDTO.getLedgerName()) ? + offDeviceDTO.getTagNumber().concat("|"). + concat(offDeviceDTO.getLedgerName()) : + offDeviceDTO.getPlace(), "1"); alarmRecordsList.add(alarmRecords); ledgers.add(offDeviceDTO); } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java new file mode 100644 index 0000000..cb554b9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.data.dto; + + +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class PanDataDTO implements Serializable { + + private static final long serialVersionUID = 1232822221212L; + + private String dataTime; + + private String attributeType; + + private String dataValue; + + private String deviceCode; + + + +} 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 index a082d00..2a943ad 100644 --- 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 @@ -23,6 +23,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -37,6 +38,7 @@ * @author zt * @since 2025-01-22 */ +@Slf4j @RequiredArgsConstructor @Service public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { @@ -71,8 +73,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -80,8 +81,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}",devCode, e); } } @@ -141,8 +141,7 @@ } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -222,8 +221,10 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); +// e.printStackTrace(); +// log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); + } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java index dd80611..cd24860 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java @@ -83,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -124,8 +123,7 @@ busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -200,8 +198,7 @@ alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } //低电量报警处理 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 302b446..f0def39 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 @@ -76,8 +76,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -85,8 +84,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -133,8 +131,7 @@ if (i < jsonArray.size() - 1) continue; busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -217,8 +214,7 @@ } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } 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 e5ba8f7..a02af88 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataMonitorPipeOtherServiceImpl extends ServiceImpl implements IDataMonitorPipeOtherService, IDataAbstractService { @@ -73,8 +75,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -116,8 +116,7 @@ //2.写入新的报警 alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + log.error("处理报警时发生异常,devcode:{},e:{}", devCode, e); } } } @@ -160,8 +159,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmEventCode)); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -341,8 +339,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag || ObjectUtil.isNotEmpty(alarmContent) ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java index 5dc8c2b..f383690 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java @@ -2,7 +2,6 @@ import cn.hutool.core.date.DateUtil; 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; @@ -13,15 +12,20 @@ import com.casic.missiles.modular.alarm.service.IAlarmRuleService; import com.casic.missiles.modular.data.dao.DataGasMapper; import com.casic.missiles.modular.data.dao.DataPanGasMapper; +import com.casic.missiles.modular.data.dto.PanDataDTO; import com.casic.missiles.modular.data.entity.DataPanGas; import com.casic.missiles.modular.data.service.IDataPanGasService; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.CommonUtil; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonToken; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.io.IOException; import java.util.Date; import java.util.List; import java.util.Map; @@ -68,78 +72,179 @@ } - @Transactional @Override public boolean processAcceptGasData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); - JSONArray jsonArray = jsonObject.getJSONArray("data"); - String devCode = ""; - for (int i = 0; i < jsonArray.size(); i++) { - try { - devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); - if (ObjectUtil.isEmpty(devCode)) continue; - List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); - String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); - String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); - //暂只存浓度 - if ("2".equals(attributeType)) continue; - String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); - gas = String.format("%.2f", Double.valueOf(gas)); - //1.存数据 - save(DataPanGas.builder() - .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") - .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") - .deviceCode(devCode) - .concentration(gas) - .logtime(DateUtil.parseDateTime(dataTime)) - .build());//存储采集数据 - //2.有无超限处理流程(判断最后一条数据) -// if (i < jsonArray.size() - 1) continue; - - //3.清除设备告警 - alarmRecordsService.cancelDeviceAlarm(devCode); - //4.存报警 - //若没绑场站,则不产生报警 - boolean alarmFlag = false; - String bfcf = busDeviceService.getBfcf(devCode); - 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))) { - dataTime = dataTime.replaceAll("-", ""); - dataTime = dataTime.replaceAll(":", ""); - dataTime = dataTime.replaceAll("\\s+", ""); - alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); - } - break; - } - } - } - //5.清数据报警 - if (!alarmFlag) { - alarmRecordsService.cancelDataAlarm(devCode); - } - //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); - //7.更新监测井状态 (1:正常,2:报警) - if (busWellDTOList != null && busWellDTOList.size() > 0) { - alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); - } - } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + JsonFactory factory = new JsonFactory(); + try (JsonParser parser = factory.createParser(jsonObject.getString("data"))) { + // 定位到 "data" 数组 + while (parser.nextToken() != JsonToken.START_ARRAY) { + parser.nextToken(); } + // 逐条处理数据 + while (parser.nextToken() != JsonToken.END_ARRAY) { + if (parser.getCurrentToken() == JsonToken.START_OBJECT) { + processSingleData(parseJsonObject(parser)); + } + + } + } catch (IOException e) { + e.printStackTrace(); } + return true; } + private PanDataDTO parseJsonObject(JsonParser parser) throws IOException { + PanDataDTO panDataDTO = new PanDataDTO(); + while (parser.nextToken() != JsonToken.END_OBJECT) { + String fieldName = parser.getCurrentName(); + if ("dataTime".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataTime(parser.getText()); + } else if ("attributeType".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setAttributeType(parser.getText()); + } else if ("dataValue".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataValue(parser.getText()); + } else if ("deviceCode".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDeviceCode(parser.getText()); + } + } + return panDataDTO; + } + + + private void processSingleData(PanDataDTO panDataDTO) { + try { + String devCode = panDataDTO.getDeviceCode(); + if (ObjectUtil.isEmpty(devCode)) return; + List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); + String gas = panDataDTO.getDataValue(); + String attributeType = panDataDTO.getAttributeType(); + //暂只存浓度 + if ("2".equals(attributeType)) return; + String dataTime = panDataDTO.getDataTime(); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataPanGas.builder() + .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .deviceCode(devCode) + .concentration(gas) + .logtime(DateUtil.parseDateTime(dataTime)) + .build());//存储采集数据 + + boolean alarmFlag = false; + String bfcf = busDeviceService.getBfcf(devCode); + 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))) { +// dataTime = dataTime.replaceAll("-", ""); +// dataTime = dataTime.replaceAll(":", ""); +// dataTime = dataTime.replaceAll("\\s+", ""); + alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); + //7.更新监测井状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + log.error("处理云台数据时发生异常,devcode:{},data:{},e:{}", panDataDTO.getDeviceCode(), panDataDTO.toString(), e); + } + } + + +// @Transactional +// @Override +// public boolean processAcceptGasData(Map dataParams) { +// JSONObject jsonObject = new JSONObject(dataParams); +// JSONArray jsonArray = jsonObject.getJSONArray("data"); +// String devCode = ""; +// for (int i = 0; i < jsonArray.size(); i++) { +// try { +// devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); +// if (ObjectUtil.isEmpty(devCode)) continue; +// List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); +// String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); +// String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); +// //暂只存浓度 +// if ("2".equals(attributeType)) continue; +// String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); +// gas = String.format("%.2f", Double.valueOf(gas)); +// //1.存数据 +// save(DataPanGas.builder() +// .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") +// .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") +// .deviceCode(devCode) +// .concentration(gas) +// .logtime(DateUtil.parseDateTime(dataTime)) +// .build());//存储采集数据 +// //2.有无超限处理流程(判断最后一条数据) +//// if (i < jsonArray.size() - 1) continue; +// +// //3.清除设备告警 +//// alarmRecordsService.cancelDeviceAlarm(devCode); +// //4.存报警 +// //若没绑场站,则不产生报警 +// boolean alarmFlag = false; +// String bfcf = busDeviceService.getBfcf(devCode); +// 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))) { +//// dataTime = dataTime.replaceAll("-", ""); +//// dataTime = dataTime.replaceAll(":", ""); +//// dataTime = dataTime.replaceAll("\\s+", ""); +// alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); +// } +// break; +// } +// } +// } +// //5.清数据报警 +// if (!alarmFlag) { +// alarmRecordsService.cancelDataAlarm(devCode); +// } +// //6.更新电量及状态 (1:正常,2:报警) +// alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); +// //7.更新监测井状态 (1:正常,2:报警) +// if (busWellDTOList != null && busWellDTOList.size() > 0) { +// alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); +// } +// } catch (Exception e) { +// log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); +// } +// } +// return true; +// } + @Override public boolean acceptAlarmData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); 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 37d731d..a17953b 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataTubeOtherServiceImpl extends ServiceImpl implements IDataTubeOtherService, IDataAbstractService { @@ -73,7 +75,7 @@ } } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,7 +84,7 @@ imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -122,8 +124,8 @@ } //特殊处理消警 if ("CancelWaterImmersionAlarm".equals(alarmType)) { - if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { - alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + if (alarmRecordsService.isWatchAlarms(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelWatchAlarms(devCode, "WaterImmersionAlarm"); } continue; } @@ -146,8 +148,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmType)); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -227,8 +228,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java new file mode 100644 index 0000000..3be65dd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java @@ -0,0 +1,170 @@ +package com.casic.missiles.modular.aop; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.aop.annotion.ReflectionUtils; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.modular.interfaces.log.LogManager; +import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.Serializable; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Aspect +@Component +public class OperateLogAspect { + private Logger log = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private ApplicationContext applicationContext; + + public static volatile Map oldMap = new HashMap<>(); + + public OperateLogAspect() { + } + + @Pointcut("@annotation(com.casic.missiles.modular.aop.annotion.OperateLog)") + public void cutService() { + } + + @Around("cutService()") + public Object recordSysLog(ProceedingJoinPoint point) throws Throwable { + Object result = point.proceed(); + + try { + this.handle(point); + } catch (Exception var4) { + this.log.error("日志记录出错!", var4); + } + + return result; + } + + /** + * 处理请求前执行 + */ + @Before(value = "@annotation(operateLog)") + public void boBefore(JoinPoint joinPoint, OperateLog operateLog) { + Object info = joinPoint.getArgs()[0]; + if ("edit".equals(operateLog.type()) && operateLog.needDefaultCompare()) { + Class cls = operateLog.serviceClass(); + IService service = (IService) applicationContext.getBean(cls); + Object result; + if (service instanceof IBusDeviceService) { + result = ((IBusDeviceService) service).getByDeviceId((Long) ReflectionUtils.getFieldValue(info, "id")); + } else + result = service.getById((Serializable) ReflectionUtils.getFieldValue(info, "id")); + oldMap = (Map) objectToMap(result); // 存储修改前的对象 + } + } + + private void handle(ProceedingJoinPoint point) throws Exception { + Signature sig = point.getSignature(); + MethodSignature msig = null; + if (!(sig instanceof MethodSignature)) { + throw new IllegalArgumentException("该注解只能用于方法"); + } else { + msig = (MethodSignature) sig; + Object target = point.getTarget(); + Method currentMethod = target.getClass().getMethod(msig.getName(), msig.getParameterTypes()); + String methodName = currentMethod.getName(); + AuthUser user = ShiroKit.getUser(); + if (null != user) { + String className = point.getTarget().getClass().getName(); + Object[] params = point.getArgs(); + OperateLog annotation = (OperateLog) currentMethod.getAnnotation(OperateLog.class); + String bussinessName = annotation.value(); + String key = annotation.key(); + Class dictClass = annotation.dict(); + String sb = argsArrayToString(params); + String msg = sb; + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + if ("add".equals(annotation.type())) { + Map parameters = (Map) objectToMap(params[0]); + msg = CollectionUtils.isEmpty(parameters) ? sb : ReflectionUtils.parseMutiKey(dictMap, key, parameters); + } else if ("edit".equals(annotation.type())) { + msg = CollectionUtils.isEmpty(oldMap) ? sb : ReflectionUtils.contrastObj(dictClass, key, params[0], oldMap); + }else if("delete".equals(annotation.type())){ + msg=dictMap.get(annotation.key())+":"+ReflectionUtils.getDeleteKeys(params[0]); + } + LogManager.me().executeLog(LogTaskFactory.bussinessLog(user.getId(), bussinessName, className, methodName, msg)); + } + } + } + + + /** + * 参数拼装 + */ + private String argsArrayToString(Object[] paramsArray) { + Gson gson = new GsonBuilder().create(); + String params = ""; + if (paramsArray != null && paramsArray.length > 0) { + for (int i = 0; i < paramsArray.length; i++) { + if (!isFilterObject(paramsArray[i])) { + params += gson.toJson(paramsArray[i]) + " & "; + } + } + } + return params.trim(); + } + + + /** + * 判断是否需要过滤的对象。 + * + * @param o 对象信息。 + * @return 如果是需要过滤的对象,则返回true;否则返回false。 + */ + public boolean isFilterObject(final Object o) { + return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse; + } + + private Map objectToMap(Object obj) { + if (obj == null) { + return null; + } + ObjectMapper mapper = new ObjectMapper(); + mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + // 如果使用JPA请自己打开这条配置 + // mapper.addMixIn(Object.class, IgnoreHibernatePropertiesInJackson.class); + Map mappedObject = mapper.convertValue(obj, Map.class); + return mappedObject; + + + } +} + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java new file mode 100644 index 0000000..77afa9c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.aop.annotion; + +import java.lang.annotation.*; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.FIELD}) +@Documented +public @interface DataName { + String name() default ""; // 字段名称 + + /** + * 读取枚举内容转义表达式 (如: 0=男,1=女,2=未知) + */ + String readConverterExp() default ""; +} + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java new file mode 100644 index 0000000..f1f59ad --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.aop.annotion; + + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.common.constant.dictmap.base.SystemDict; + +import java.lang.annotation.*; + +@Inherited +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.METHOD}) +public @interface OperateLog { + String value() default ""; + + String key() default "id"; + + Class serviceClass() default IService.class; + + // 是否需要比较新旧数据 + boolean needDefaultCompare() default true; + + //操作类型 add update delete + String type() default "update"; + + Class dict() default SystemDict.class; +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java new file mode 100644 index 0000000..eb773ad --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java @@ -0,0 +1,328 @@ +package com.casic.missiles.modular.aop.annotion; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.modular.interfaces.dictmap.factory.DictFieldWrapperFactory; +import lombok.extern.slf4j.Slf4j; + +import java.beans.PropertyDescriptor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.*; + +import static com.casic.missiles.modular.interfaces.utils.Contrast.firstCharToLowerCase; +import static com.casic.missiles.modular.interfaces.utils.Contrast.firstCharToUpperCase; + +@Slf4j +public class ReflectionUtils { + + /** + * 直接读取对象属性值, 无视private/protected修饰符, 不经过getter函数. + * + * @param obj 读取的对象 + * @param fieldName 读取的列 + * @return 属性值 + */ + public static Object getFieldValue(final Object obj, final String fieldName) { + Field field = getAccessibleField(obj, fieldName); + if (field == null) { + throw new IllegalArgumentException("Could not find field [" + fieldName + "] on target [" + obj + "]"); + } + + Object result = null; + try { + result = field.get(obj); + } catch (IllegalAccessException e) { + log.error("不可能抛出的异常{}", e.getMessage()); + e.printStackTrace(); + } + return result; + } + + /** + * 循环向上转型, 获取对象的DeclaredField, 并强制设置为可访问.如向上转型到Object仍无法找到, 返回null. + * + * @param obj 查找的对象 + * @param fieldName 列名 + * @return 列 + */ + public static Field getAccessibleField(final Object obj, final String fieldName) { + for (Class superClass = obj.getClass(); superClass != Object.class; superClass = superClass.getSuperclass()) { + try { + Field field = superClass.getDeclaredField(fieldName); + makeAccessible(field); + return field; + } catch (NoSuchFieldException e) { // NOSONAR + // Field不在当前类定义,继续向上转型 + e.printStackTrace(); + continue; // new add + } + } + return null; + } + + /** + * 改变private/protected的成员变量为public,尽量不调用实际改动的语句,避免JDK的SecurityManager抱怨。 + * + * @param + */ + public static void makeAccessible(Field field) { + if ((!Modifier.isPublic(field.getModifiers()) || !Modifier.isPublic(field.getDeclaringClass().getModifiers()) || Modifier + .isFinal(field.getModifiers())) && !field.isAccessible()) { + field.setAccessible(true); + } + } + + /** + * 获取两个对象同名属性内容不相同的列表 + * + * @param class1 old对象 + * @param class2 new对象 + * @return 区别列表 + * @throws ClassNotFoundException 异常 + * @throws IllegalAccessException 异常 + */ + public static List> compareTwoClass(Object class1, Object class2) throws ClassNotFoundException, IllegalAccessException { + List> list = new ArrayList>(); + // 获取对象的class + Class clazz1 = class1.getClass(); + Class clazz2 = class2.getClass(); + // 获取对象的属性列表 + Field[] field1 = clazz1.getDeclaredFields(); + Field[] field2 = clazz2.getDeclaredFields(); + StringBuilder sb = new StringBuilder(); + // 遍历属性列表field1 + for (int i = 0; i < field1.length; i++) { + // 遍历属性列表field2 + for (int j = 0; j < field2.length; j++) { + // 如果field1[i]属性名与field2[j]属性名内容相同 + if (field1[i].getName().equals(field2[j].getName())) { + if (field1[i].getName().equals(field2[j].getName())) { + field1[i].setAccessible(true); + field2[j].setAccessible(true); + // 如果field1[i]属性值与field2[j]属性值内容不相同 + if (!compareTwo(field1[i].get(class1), field2[j].get(class2))) { + Map map2 = new HashMap(); + DataName name = field1[i].getAnnotation(DataName.class); + String fieldName = ""; + if (name != null) { + fieldName = name.name(); + } else { + fieldName = field1[i].getName(); + } + map2.put("name", fieldName); + map2.put("old", field1[i].get(class1)); + map2.put("new", field2[j].get(class2)); + list.add(map2); + } + break; + } + } + } + } + return list; + } + + /** + * 对比两个数据是否内容相同 + * + * @param object1 比较对象1 + * @param object2 比较对象2 + * @return boolean类型 + */ + public static boolean compareTwo(Object object1, Object object2) { + if (object1 == null && object2 == null) { + return true; + } + if (object1 == null && object2 != null) { + return false; + } + if (object1.equals(object2)) { + return true; + } + return false; + } + + public static String contrastObjByName(Class dictClass, String key, Object pojo1, Map pojo2) throws IllegalAccessException, InstantiationException { + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + String str = parseMutiKey(dictMap, key, pojo2) + ";;;"; + + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if (!"serialVersionUID".equals(field.getName())) { + String prefix = "get"; + int prefixLength = 3; + if (field.getType().getName().equals("java.lang.Boolean")) { + prefix = "is"; + prefixLength = 2; + } + + Method getMethod = null; + + try { + getMethod = clazz.getDeclaredMethod(prefix + firstCharToUpperCase(field.getName())); + } catch (NoSuchMethodException var22) { + System.err.println("this className:" + clazz.getName() + " is not methodName: " + var22.getMessage()); + continue; + } + + Object o1 = getMethod.invoke(pojo1); + Object o2 = pojo2.get(firstCharToLowerCase(getMethod.getName().substring(prefixLength))); + if (o1 != null && o2 != null) { + if (o1 instanceof Date) { + o1 = DateUtil.format(new Date(), "yyyy-MM-dd"); + } else if (o1 instanceof Integer) { + o2 = Integer.parseInt(o2.toString()); + } + + if (!o1.toString().equals(o2.toString())) { + if (i != 1) { + str = str + ";;;"; + } + + String fieldName = dictMap.get(field.getName()); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(field.getName()); + if (fieldWarpperMethodName != null) { + Object o1Warpper = DictFieldWrapperFactory.createFieldWrapper(o1, fieldWarpperMethodName); + Object o2Warpper = DictFieldWrapperFactory.createFieldWrapper(o2, fieldWarpperMethodName); + str = str + "字段名称:" + fieldName + ",旧值:" + o1Warpper + ",新值:" + o2Warpper; + } else { + str = str + "字段名称:" + fieldName + ",旧值:" + o1 + ",新值:" + o2; + } + + ++i; + } + } + } + } + } catch (Exception var23) { + var23.printStackTrace(); + } + + return str; + } + + public static String parseMutiKey(AbstractDictMap dictMap, String key, Map requests) { + StringBuilder sb = new StringBuilder(); + if (key.indexOf(",") != -1) { + String[] keys = key.split(","); + String[] var13 = keys; + int var14 = keys.length; + + for (int var7 = 0; var7 < var14; ++var7) { + String item = var13[var7].trim(); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(item); + Object value = requests.get(item); + if (fieldWarpperMethodName != null) { + Object valueWarpper = DictFieldWrapperFactory.createFieldWrapper(value, fieldWarpperMethodName); + sb.append(dictMap.get(item) + "=" + valueWarpper + ","); + } else { + sb.append(dictMap.get(item) + "=" + (ObjectUtil.isNotEmpty(value) ? value.toString() : "") + ","); + } + } + + return StrUtil.removeSuffix(sb.toString(), ","); + } else { + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(key); + Object value = requests.get(key); + if (fieldWarpperMethodName != null) { + Object valueWarpper = DictFieldWrapperFactory.createFieldWrapper(value, fieldWarpperMethodName); + sb.append(dictMap.get(key) + "=" + valueWarpper); + } else { + sb.append(dictMap.get(key) + "=" + (ObjectUtil.isNotEmpty(value) ? value.toString() : "")); + } + + return sb.toString(); + } + } + + public static String getDeleteKeys(Object pojo1) { + String str = ""; + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if ("keys".equals(field.getName())) { + PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); + Method getMethod = pd.getReadMethod(); + Object o1 = getMethod.invoke(pojo1); + return ObjectUtil.isNotEmpty(o1) ? o1.toString().replaceAll("\\[|]", "") : "".concat(",已删除"); + } + } + + } catch (Exception var21) { + var21.printStackTrace(); + } + return str; + } + + public static String contrastObj(Class dictClass, String key, Object pojo1, Map pojo2) throws IllegalAccessException, InstantiationException { + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); +// String str = parseMutiKey(dictMap, key, pojo2) + ";;;"; + String str = ""; + + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if (!"serialVersionUID".equals(field.getName())) { + PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); + Method getMethod = pd.getReadMethod(); + Object o1 = getMethod.invoke(pojo1); + Object o2 = pojo2.get(firstCharToLowerCase(getMethod.getName().substring(3))); + if (o1 != null && o2 != null) { + if (o1 instanceof Integer) { + o2 = Integer.parseInt(o2.toString()); + } else if (o1 instanceof Date) { + o1 = DateUtil.format((Date) o1, "yyyy-MM-dd HH:mm:ss"); + } + + if (!o1.toString().equals(o2.toString())) { + if (i != 1) { + str = str + ";"; + } + + String fieldName = dictMap.get(field.getName()); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(field.getName()); + if (fieldWarpperMethodName != null) { + Object o1Warpper = DictFieldWrapperFactory.createFieldWrapper(o1, fieldWarpperMethodName); + Object o2Warpper = DictFieldWrapperFactory.createFieldWrapper(o2, fieldWarpperMethodName); + str = str + fieldName + ":将【" + o1Warpper + "】,改为【" + o2Warpper + "】"; + } else { + str = str + fieldName + ":将【" + o1 + "】,改为【" + o2 + "】"; + } + + ++i; + } + } + } + } + } catch (Exception var21) { + var21.printStackTrace(); + } + + return str; + } + + +} \ No newline at end of file diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java index 7497ebf..18fd820 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java @@ -8,12 +8,14 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.StateDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.DeviceTypeDict; import com.casic.missiles.modular.device.dto.BaseDeviceTypeDTO; import com.casic.missiles.modular.device.dto.BaseDeviceTypeIdsDTO; import com.casic.missiles.modular.device.dto.SelectDTO; @@ -63,6 +65,7 @@ return ReturnUtil.success(super.packForBT(baseDeviceTypePage)); } + @OperateLog(value = "新增设备类型", key = "typeName,watchObject,isUsed,typeDescription", dict = DeviceTypeDict.class, type = "add") @ApiOperation("增加设备类型") @PostMapping("/add") @ResponseBody @@ -71,6 +74,7 @@ return ReturnUtil.success(iBaseDeviceTypeService.saveBaseDeviceType(baseDeviceType)); } + @OperateLog(value = "编辑设备类型", dict = DeviceTypeDict.class, serviceClass = IBaseDeviceTypeService.class, type = "edit") @ApiOperation("编辑设备类型") @PostMapping("/edit") @ResponseBody @@ -81,10 +85,11 @@ return ReturnUtil.success(iBaseDeviceTypeService.updateById(baseDeviceType)); } + @OperateLog(value = "删除设备类型", key = "typeName", dict = DeviceTypeDict.class, serviceClass = IBaseDeviceTypeService.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); @@ -113,7 +118,7 @@ public ReturnDTO selectList(@RequestBody BaseDeviceTypeIdsDTO request) { QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.in(request.getDeviceTypeList()!=null&&request.getDeviceTypeList().size()>0, "id", request.getDeviceTypeList()); + queryWrapper.in(request.getDeviceTypeList() != null && request.getDeviceTypeList().size() > 0, "id", request.getDeviceTypeList()); queryWrapper.eq("IS_USED", "1"); List baseDeviceTypes = iBaseDeviceTypeService.list(queryWrapper); List selectDTOS = new ArrayList<>(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java index 42d752d..54944e2 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java @@ -3,14 +3,15 @@ import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.IdDTO; -import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.ProductDict; import com.casic.missiles.modular.device.dto.BaseProductDTO; import com.casic.missiles.modular.device.dto.SelectProductDTO; import com.casic.missiles.modular.device.entity.BaseProduct; @@ -21,7 +22,6 @@ import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; -import java.util.List; import java.util.Objects; /** @@ -49,6 +49,7 @@ return ReturnUtil.success(super.packForBT(iBaseProductService.pageList(page, requestDTO))); } + @OperateLog(value = "新增产品", key = "productName,deviceType,deviceModel,manufacturerId,protocol,accessMethod,powerSupplyMode,dataService", dict = ProductDict.class, type = "add") @ApiOperation("新增") @PostMapping("/add") @ResponseBody @@ -58,6 +59,7 @@ } + @OperateLog(value = "编辑产品", dict = ProductDict.class, serviceClass = IBaseProductService.class, type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -68,10 +70,11 @@ return ReturnUtil.success(iBaseProductService.updateBaseProductById(baseProduct)); } + @OperateLog(value = "删除产品", key = "productName", dict = ProductDict.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 509bd7b..103acf2 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 @@ -9,6 +9,7 @@ import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; @@ -17,6 +18,7 @@ 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.aop.annotion.OperateLog; import com.casic.missiles.modular.device.dict.BusConfigDict; import com.casic.missiles.modular.device.dict.DeviceDict; import com.casic.missiles.modular.device.dto.*; @@ -65,7 +67,8 @@ } - @BussinessLog(value = "新增设备", key = "devcode,deviceName,deviceType,installDate,productId", dict = DeviceDict.class) + @OperateLog(value = "新增设备", key = "devcode,deviceType,productId," + + "valid,communicationType,simId,warrantyPeriod,tagNumber,leftLength,rightLength,", dict = DeviceDict.class,type = "add") @CacheEvict(value="busLedgersCache", key="#busDevice.getDevcode()") @ApiOperation("新增") @PostMapping("/add") @@ -75,7 +78,8 @@ } - @BussinessLog(value = "编辑设备", key = "devcode,deviceName,deviceType,installDate,productId", dict = DeviceDict.class) + @OperateLog(value = "编辑设备", key = "devcode,deviceType,installDate,productId," + + "leftLength,rightLength,communicationType,simId,warrantyPeriod", dict = DeviceDict.class,serviceClass = IBusDeviceService.class,type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -86,11 +90,12 @@ return ReturnUtil.success(iBusDeviceService.updateBusDevice(busDevice)); } + @OperateLog(value = "删除设备", key = "devcode", dict = DeviceDict.class,serviceClass = IBusDeviceService.class,type = "delete") @CacheEvict(value="busLedgersCache", allEntries = true) @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 31de56e..6f35acd 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 @@ -4,8 +4,8 @@ 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.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.page.PageFactory; @@ -16,11 +16,8 @@ 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.BusDeviceDTO; -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.BusDevice; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.CommonUtil; @@ -53,6 +50,7 @@ private final IBusLedgerPipeService iBusLedgerPipeService; private final IBaseExportService iBaseExportService; + private final AbstractDictService abstractDictService; @ApiOperation("新建点位") @PostMapping("/addPosition") @@ -60,10 +58,10 @@ 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,"安装位号已存!!!"); + if (busLedgerPipeList != null && busLedgerPipeList.size() > 0) { + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE, "安装位号已存!!!"); } - Long id =IdUtil.getSnowflake(1,2).nextId(); + Long id = IdUtil.getSnowflake(1, 2).nextId(); busLedgerPipe.setId(id); busLedgerPipe.setLedgerCode(busLedgerPipe.getTagNumber()); busLedgerPipe.setArea(CommonUtil.getAreaCode(busLedgerPipe.getPosition())); @@ -139,7 +137,11 @@ page.setCurrent(1); page.setSize(Integer.MAX_VALUE); Page devicePage = iBusLedgerPipeService.listPage(page, busLedgerPipeRequestDTO); + List records = devicePage.getRecords(); try { + for (BusLedgerPipe busLedgerPipe : records) { + busLedgerPipe.setLocationCategory(abstractDictService.getDictNameByCode("locationType", busLedgerPipe.getLocationCategory())); + } iBaseExportService.exportExcel(response, BusLedgerPipe.class, devicePage.getRecords(), ExportEnum.LEDGER_PIPE_EXPORT.getSheetName()); } catch (Exception e) { e.printStackTrace(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java index e87f3f8..8040c74 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java @@ -7,10 +7,13 @@ 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.DeletesDTO; import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.ProtocolDict; import com.casic.missiles.modular.device.dto.BusProtocolDTO; import com.casic.missiles.modular.device.entity.BusProtocol; import com.casic.missiles.modular.device.service.IBusProtocolService; @@ -35,10 +38,10 @@ @RestController @RequestMapping("/system/busProtocol") public class BusProtocolController extends ExportController { - + private final IBusProtocolService protocolService; - + @ApiOperation("查询分页接口") @PostMapping("/listPage") @ResponseBody @@ -47,9 +50,10 @@ queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getProtocolName()), "PROTOCOL_NAME", requestDTO.getProtocolName()); queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getProtocolCode()), "PROTOCOL_CODE", requestDTO.getProtocolCode()); Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(protocolService.page(page,queryWrapper))); + return ReturnUtil.success(super.packForBT(protocolService.page(page, queryWrapper))); } + @OperateLog(value = "新增协议", key = "protocolName,protocolCode,version,ip,description", dict = ProtocolDict.class, type = "add") @ApiOperation("新增") @PostMapping("/add") @ResponseBody @@ -58,6 +62,7 @@ return ReturnUtil.success(protocolService.save(busProtocol)); } + @OperateLog(value = "编辑协议", dict = ProtocolDict.class, serviceClass = IBusProtocolService.class, type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -68,10 +73,11 @@ return ReturnUtil.success(protocolService.updateById(busProtocol)); } + @OperateLog(value = "删除协议", key = "protocolName", dict = ProtocolDict.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 c8583d1..18b16e5 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 @@ -346,7 +346,7 @@ ay.ALARM_CATEGORY, ac.ALARM_LEVEL as alarmLevelName, bm.NAME AS manufactureName, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.CANCEL_TIME) as cancelDuration + TIMESTAMPDIFF(MINUTE, rd.TS, rd.CANCEL_TIME) as cancelDuration FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -377,11 +377,14 @@ lr.ledgerName, lr.DEPTID, lr.id as ledgerId, + lr.lngGaode, + lr.latGaode, + lr.type as watchObject, bd.INSTALL_DATE, ay.ALARM_CATEGORY, ac.ALARM_LEVEL as alarmLevelName, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.CANCEL_TIME) as cancelDuration, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.PROCESS_TIME) as processDuration, + TIMESTAMPDIFF(SECOND, rd.TS, rd.CANCEL_TIME) as cancelDuration, + TIMESTAMPDIFF(SECOND, rd.TS, rd.PROCESS_TIME) as processDuration, bm.`NAME` AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -541,15 +544,22 @@ - SELECT count(1) as sum,"1" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where `STATUS` ='1' - and ar.EXCEPTION_TYPE='0' + + WITH alarm_temp as (SELECT + ar.id, + ar.ts, + lr.DEPTID + FROM + `alarm_records` ar + LEFT JOIN bus_device bd ON ar.DEVCODE = bd.DEVCODE + AND bd.VALID > 0 + LEFT JOIN bus_device_ledger bl ON bd.ID = bl.DEVICE_ID + AND bl.VALID = '1' + JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID + AND lr.type = bl.type + AND lr.VALID = '1' + AND lr.ledgerCode = ar.LEDGER_CODE + WHERE + `STATUS` = '1' + AND ar.EXCEPTION_TYPE = '0'),alarms_temp as( + SELECT ar.id, ar.ts, bl.DEPTID FROM `alarm_records` ar join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.EXCEPTION_TYPE='0' + ) + SELECT count(1) as sum,"1" as type FROM alarm_temp ar + + + and ar.DEPTID in (${deptStrs}) + + + UNION ALL + SELECT count(1) as sum,"2" as type FROM alarms_temp ar where ar.TS>=CURDATE() + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"2" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>=CURDATE() - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"3" as type FROM alarms_temp ar where ar.TS>= CURDATE() - INTERVAL DAYOFWEEK(CURDATE()) - 2 DAY + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"3" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>= CURDATE() - INTERVAL DAYOFWEEK(CURDATE()) - 2 DAY - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"4" as type FROM alarms_temp ar where ar.TS>=DATE_FORMAT(NOW(),'%Y-%m-01') + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"4" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>=DATE_FORMAT(NOW(),'%Y-%m-01') - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"5" as type FROM alarms_temp ar where ar.TS>= DATE_FORMAT(CURDATE(), '%Y-01-01') + - and bl.DEPTID in (${deptStrs}) - - UNION ALL - SELECT count(1) as sum,"5" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>= DATE_FORMAT(CURDATE(), '%Y-01-01') - and ar.EXCEPTION_TYPE='0' - - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java index 3e0edd6..9dab3a7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java @@ -71,4 +71,18 @@ private Long deptid; + @ApiModelProperty("经度") + private String lngGaode; + + @ApiModelProperty("纬度") + private String latGaode; + + @ApiModelProperty("监测类型") + private String watchObject; + + @ApiModelProperty("点位id") + private Long ledgerId; + + + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java index e938da8..60464c4 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java @@ -12,6 +12,7 @@ private String deviceType; private String tagNumber; private String ledgerCode; + private String ledgerName; private String place; //台账类型 private String type; 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 ac4cabe..e623df7 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 @@ -44,6 +44,7 @@ import static cn.hutool.core.date.DateUnit.DAY; import static com.casic.missiles.util.TimeConvertUtil.TimeConverter; +import static com.casic.missiles.util.TimeConvertUtil.TimeConverterSecond; /** *

@@ -180,8 +181,8 @@ public DeviceAlarmDetailDTO deviceAlarmDetail(Long id) { DeviceAlarmDetailDTO alarmDetail = this.baseMapper.deviceAlarmDetail(id); - alarmDetail.setCancelDuration(TimeConverter(alarmDetail.getCancelDuration())); - alarmDetail.setProcessDuration(TimeConverter(alarmDetail.getProcessDuration())); + alarmDetail.setCancelDuration(TimeConverterSecond(alarmDetail.getCancelDuration())); + alarmDetail.setProcessDuration(TimeConverterSecond(alarmDetail.getProcessDuration())); alarmDetail.setDeptName(ObjectUtil.isNotEmpty(alarmDetail.getDeptid()) ? commonServer.getDeptNamesByDeptId(alarmDetail.getDeptid()) : ""); // alarmDetail.setAddress(alarmDetail.getTagNumber().concat("|").concat(alarmDetail.getLedgerName())); alarmDetail.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmDetail.getAlarmCategory())); @@ -524,16 +525,26 @@ @Override public void cancelDeviceAlarm(String devCode) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("DEVCODE", devCode); - updateWrapper.eq("EXCEPTION_TYPE", "1"); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE", devCode); + queryWrapper.eq("EXCEPTION_TYPE", "1"); //只有挂起和已处置的才消 // updateWrapper.ge("PROCESS_STATUS", "3"); - updateWrapper.eq("STATUS", "1"); - updateWrapper.set("STATUS", "0"); - updateWrapper.set("CANCEL_TIME", new Date()); - this.update(updateWrapper); - //toDo:需要加流程取消日志 + queryWrapper.eq("STATUS", "1"); + List alarmRecordsList = this.list(queryWrapper); + if (alarmRecordsList != null && alarmRecordsList.size() > 0) { + alarmRecordsList.forEach(alarmRecords -> { + alarmRecords.setStatus("0"); + alarmRecords.setCancelTime(new Date()); + alarmRecords.setPreProcessStatus(alarmRecords.getProcessStatus()); + alarmRecords.setProcessStatus(ApprovalStatusEnum.FINISHED.getCode()); + this.updateById(alarmRecords); + }); + //添加流程日志 + approvalLogMapper.insert(new ApprovalLog(alarmRecordsList.get(0).getId(), "1", + "", ApprovalStatusEnum.FINISHED.getCode(), + null)); + } } @Override @@ -674,8 +685,12 @@ AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), data.concat("%LEL"), data, - alarmRuleResponseDTO.getAlarmLevelId(),DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmLevelId(), DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmRuleResponseDTO.getAlarmTypeName(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -721,7 +736,7 @@ @Override - public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime,List busWellDTOList, + public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime, List busWellDTOList, Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { @@ -730,8 +745,12 @@ try { AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, - alarmLevelId, DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmLevelId, DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmTypeName, + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace() + , "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -793,7 +812,11 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.get().getAlarmTypeId(), alarmRuleResponseDTO.get().getAlarmTypeName(), alarmRuleResponseDTO.get().getAlarmLevelId(), DateUtil.parse(logTime), - alarmRuleResponseDTO.get().getAlarmThreshold(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "1"); + alarmRuleResponseDTO.get().getAlarmThreshold(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "1"); this.save(alarmRecords); } catch (Exception e) { e.printStackTrace(); @@ -846,8 +869,8 @@ * @param cell */ @Override - public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent,String logTime) { - this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent,DateUtil.parse(logTime)); + public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent, String logTime) { + this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent, DateUtil.parse(logTime)); } @Override @@ -903,7 +926,10 @@ offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), - offDeviceDTO.getPlace(), "1"); + ObjectUtil.isNotEmpty(offDeviceDTO.getLedgerName()) ? + offDeviceDTO.getTagNumber().concat("|"). + concat(offDeviceDTO.getLedgerName()) : + offDeviceDTO.getPlace(), "1"); alarmRecordsList.add(alarmRecords); ledgers.add(offDeviceDTO); } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java new file mode 100644 index 0000000..cb554b9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.data.dto; + + +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class PanDataDTO implements Serializable { + + private static final long serialVersionUID = 1232822221212L; + + private String dataTime; + + private String attributeType; + + private String dataValue; + + private String deviceCode; + + + +} 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 index a082d00..2a943ad 100644 --- 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 @@ -23,6 +23,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -37,6 +38,7 @@ * @author zt * @since 2025-01-22 */ +@Slf4j @RequiredArgsConstructor @Service public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { @@ -71,8 +73,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -80,8 +81,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}",devCode, e); } } @@ -141,8 +141,7 @@ } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -222,8 +221,10 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); +// e.printStackTrace(); +// log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); + } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java index dd80611..cd24860 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java @@ -83,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -124,8 +123,7 @@ busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -200,8 +198,7 @@ alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } //低电量报警处理 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 302b446..f0def39 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 @@ -76,8 +76,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -85,8 +84,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -133,8 +131,7 @@ if (i < jsonArray.size() - 1) continue; busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -217,8 +214,7 @@ } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } 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 e5ba8f7..a02af88 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataMonitorPipeOtherServiceImpl extends ServiceImpl implements IDataMonitorPipeOtherService, IDataAbstractService { @@ -73,8 +75,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -116,8 +116,7 @@ //2.写入新的报警 alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + log.error("处理报警时发生异常,devcode:{},e:{}", devCode, e); } } } @@ -160,8 +159,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmEventCode)); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -341,8 +339,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag || ObjectUtil.isNotEmpty(alarmContent) ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java index 5dc8c2b..f383690 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java @@ -2,7 +2,6 @@ import cn.hutool.core.date.DateUtil; 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; @@ -13,15 +12,20 @@ import com.casic.missiles.modular.alarm.service.IAlarmRuleService; import com.casic.missiles.modular.data.dao.DataGasMapper; import com.casic.missiles.modular.data.dao.DataPanGasMapper; +import com.casic.missiles.modular.data.dto.PanDataDTO; import com.casic.missiles.modular.data.entity.DataPanGas; import com.casic.missiles.modular.data.service.IDataPanGasService; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.CommonUtil; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonToken; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.io.IOException; import java.util.Date; import java.util.List; import java.util.Map; @@ -68,78 +72,179 @@ } - @Transactional @Override public boolean processAcceptGasData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); - JSONArray jsonArray = jsonObject.getJSONArray("data"); - String devCode = ""; - for (int i = 0; i < jsonArray.size(); i++) { - try { - devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); - if (ObjectUtil.isEmpty(devCode)) continue; - List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); - String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); - String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); - //暂只存浓度 - if ("2".equals(attributeType)) continue; - String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); - gas = String.format("%.2f", Double.valueOf(gas)); - //1.存数据 - save(DataPanGas.builder() - .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") - .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") - .deviceCode(devCode) - .concentration(gas) - .logtime(DateUtil.parseDateTime(dataTime)) - .build());//存储采集数据 - //2.有无超限处理流程(判断最后一条数据) -// if (i < jsonArray.size() - 1) continue; - - //3.清除设备告警 - alarmRecordsService.cancelDeviceAlarm(devCode); - //4.存报警 - //若没绑场站,则不产生报警 - boolean alarmFlag = false; - String bfcf = busDeviceService.getBfcf(devCode); - 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))) { - dataTime = dataTime.replaceAll("-", ""); - dataTime = dataTime.replaceAll(":", ""); - dataTime = dataTime.replaceAll("\\s+", ""); - alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); - } - break; - } - } - } - //5.清数据报警 - if (!alarmFlag) { - alarmRecordsService.cancelDataAlarm(devCode); - } - //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); - //7.更新监测井状态 (1:正常,2:报警) - if (busWellDTOList != null && busWellDTOList.size() > 0) { - alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); - } - } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + JsonFactory factory = new JsonFactory(); + try (JsonParser parser = factory.createParser(jsonObject.getString("data"))) { + // 定位到 "data" 数组 + while (parser.nextToken() != JsonToken.START_ARRAY) { + parser.nextToken(); } + // 逐条处理数据 + while (parser.nextToken() != JsonToken.END_ARRAY) { + if (parser.getCurrentToken() == JsonToken.START_OBJECT) { + processSingleData(parseJsonObject(parser)); + } + + } + } catch (IOException e) { + e.printStackTrace(); } + return true; } + private PanDataDTO parseJsonObject(JsonParser parser) throws IOException { + PanDataDTO panDataDTO = new PanDataDTO(); + while (parser.nextToken() != JsonToken.END_OBJECT) { + String fieldName = parser.getCurrentName(); + if ("dataTime".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataTime(parser.getText()); + } else if ("attributeType".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setAttributeType(parser.getText()); + } else if ("dataValue".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataValue(parser.getText()); + } else if ("deviceCode".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDeviceCode(parser.getText()); + } + } + return panDataDTO; + } + + + private void processSingleData(PanDataDTO panDataDTO) { + try { + String devCode = panDataDTO.getDeviceCode(); + if (ObjectUtil.isEmpty(devCode)) return; + List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); + String gas = panDataDTO.getDataValue(); + String attributeType = panDataDTO.getAttributeType(); + //暂只存浓度 + if ("2".equals(attributeType)) return; + String dataTime = panDataDTO.getDataTime(); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataPanGas.builder() + .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .deviceCode(devCode) + .concentration(gas) + .logtime(DateUtil.parseDateTime(dataTime)) + .build());//存储采集数据 + + boolean alarmFlag = false; + String bfcf = busDeviceService.getBfcf(devCode); + 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))) { +// dataTime = dataTime.replaceAll("-", ""); +// dataTime = dataTime.replaceAll(":", ""); +// dataTime = dataTime.replaceAll("\\s+", ""); + alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); + //7.更新监测井状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + log.error("处理云台数据时发生异常,devcode:{},data:{},e:{}", panDataDTO.getDeviceCode(), panDataDTO.toString(), e); + } + } + + +// @Transactional +// @Override +// public boolean processAcceptGasData(Map dataParams) { +// JSONObject jsonObject = new JSONObject(dataParams); +// JSONArray jsonArray = jsonObject.getJSONArray("data"); +// String devCode = ""; +// for (int i = 0; i < jsonArray.size(); i++) { +// try { +// devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); +// if (ObjectUtil.isEmpty(devCode)) continue; +// List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); +// String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); +// String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); +// //暂只存浓度 +// if ("2".equals(attributeType)) continue; +// String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); +// gas = String.format("%.2f", Double.valueOf(gas)); +// //1.存数据 +// save(DataPanGas.builder() +// .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") +// .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") +// .deviceCode(devCode) +// .concentration(gas) +// .logtime(DateUtil.parseDateTime(dataTime)) +// .build());//存储采集数据 +// //2.有无超限处理流程(判断最后一条数据) +//// if (i < jsonArray.size() - 1) continue; +// +// //3.清除设备告警 +//// alarmRecordsService.cancelDeviceAlarm(devCode); +// //4.存报警 +// //若没绑场站,则不产生报警 +// boolean alarmFlag = false; +// String bfcf = busDeviceService.getBfcf(devCode); +// 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))) { +//// dataTime = dataTime.replaceAll("-", ""); +//// dataTime = dataTime.replaceAll(":", ""); +//// dataTime = dataTime.replaceAll("\\s+", ""); +// alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); +// } +// break; +// } +// } +// } +// //5.清数据报警 +// if (!alarmFlag) { +// alarmRecordsService.cancelDataAlarm(devCode); +// } +// //6.更新电量及状态 (1:正常,2:报警) +// alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); +// //7.更新监测井状态 (1:正常,2:报警) +// if (busWellDTOList != null && busWellDTOList.size() > 0) { +// alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); +// } +// } catch (Exception e) { +// log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); +// } +// } +// return true; +// } + @Override public boolean acceptAlarmData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); 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 37d731d..a17953b 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataTubeOtherServiceImpl extends ServiceImpl implements IDataTubeOtherService, IDataAbstractService { @@ -73,7 +75,7 @@ } } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,7 +84,7 @@ imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -122,8 +124,8 @@ } //特殊处理消警 if ("CancelWaterImmersionAlarm".equals(alarmType)) { - if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { - alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + if (alarmRecordsService.isWatchAlarms(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelWatchAlarms(devCode, "WaterImmersionAlarm"); } continue; } @@ -146,8 +148,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmType)); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -227,8 +228,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java new file mode 100644 index 0000000..3be65dd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java @@ -0,0 +1,170 @@ +package com.casic.missiles.modular.aop; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.aop.annotion.ReflectionUtils; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.modular.interfaces.log.LogManager; +import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.Serializable; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Aspect +@Component +public class OperateLogAspect { + private Logger log = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private ApplicationContext applicationContext; + + public static volatile Map oldMap = new HashMap<>(); + + public OperateLogAspect() { + } + + @Pointcut("@annotation(com.casic.missiles.modular.aop.annotion.OperateLog)") + public void cutService() { + } + + @Around("cutService()") + public Object recordSysLog(ProceedingJoinPoint point) throws Throwable { + Object result = point.proceed(); + + try { + this.handle(point); + } catch (Exception var4) { + this.log.error("日志记录出错!", var4); + } + + return result; + } + + /** + * 处理请求前执行 + */ + @Before(value = "@annotation(operateLog)") + public void boBefore(JoinPoint joinPoint, OperateLog operateLog) { + Object info = joinPoint.getArgs()[0]; + if ("edit".equals(operateLog.type()) && operateLog.needDefaultCompare()) { + Class cls = operateLog.serviceClass(); + IService service = (IService) applicationContext.getBean(cls); + Object result; + if (service instanceof IBusDeviceService) { + result = ((IBusDeviceService) service).getByDeviceId((Long) ReflectionUtils.getFieldValue(info, "id")); + } else + result = service.getById((Serializable) ReflectionUtils.getFieldValue(info, "id")); + oldMap = (Map) objectToMap(result); // 存储修改前的对象 + } + } + + private void handle(ProceedingJoinPoint point) throws Exception { + Signature sig = point.getSignature(); + MethodSignature msig = null; + if (!(sig instanceof MethodSignature)) { + throw new IllegalArgumentException("该注解只能用于方法"); + } else { + msig = (MethodSignature) sig; + Object target = point.getTarget(); + Method currentMethod = target.getClass().getMethod(msig.getName(), msig.getParameterTypes()); + String methodName = currentMethod.getName(); + AuthUser user = ShiroKit.getUser(); + if (null != user) { + String className = point.getTarget().getClass().getName(); + Object[] params = point.getArgs(); + OperateLog annotation = (OperateLog) currentMethod.getAnnotation(OperateLog.class); + String bussinessName = annotation.value(); + String key = annotation.key(); + Class dictClass = annotation.dict(); + String sb = argsArrayToString(params); + String msg = sb; + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + if ("add".equals(annotation.type())) { + Map parameters = (Map) objectToMap(params[0]); + msg = CollectionUtils.isEmpty(parameters) ? sb : ReflectionUtils.parseMutiKey(dictMap, key, parameters); + } else if ("edit".equals(annotation.type())) { + msg = CollectionUtils.isEmpty(oldMap) ? sb : ReflectionUtils.contrastObj(dictClass, key, params[0], oldMap); + }else if("delete".equals(annotation.type())){ + msg=dictMap.get(annotation.key())+":"+ReflectionUtils.getDeleteKeys(params[0]); + } + LogManager.me().executeLog(LogTaskFactory.bussinessLog(user.getId(), bussinessName, className, methodName, msg)); + } + } + } + + + /** + * 参数拼装 + */ + private String argsArrayToString(Object[] paramsArray) { + Gson gson = new GsonBuilder().create(); + String params = ""; + if (paramsArray != null && paramsArray.length > 0) { + for (int i = 0; i < paramsArray.length; i++) { + if (!isFilterObject(paramsArray[i])) { + params += gson.toJson(paramsArray[i]) + " & "; + } + } + } + return params.trim(); + } + + + /** + * 判断是否需要过滤的对象。 + * + * @param o 对象信息。 + * @return 如果是需要过滤的对象,则返回true;否则返回false。 + */ + public boolean isFilterObject(final Object o) { + return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse; + } + + private Map objectToMap(Object obj) { + if (obj == null) { + return null; + } + ObjectMapper mapper = new ObjectMapper(); + mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + // 如果使用JPA请自己打开这条配置 + // mapper.addMixIn(Object.class, IgnoreHibernatePropertiesInJackson.class); + Map mappedObject = mapper.convertValue(obj, Map.class); + return mappedObject; + + + } +} + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java new file mode 100644 index 0000000..77afa9c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.aop.annotion; + +import java.lang.annotation.*; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.FIELD}) +@Documented +public @interface DataName { + String name() default ""; // 字段名称 + + /** + * 读取枚举内容转义表达式 (如: 0=男,1=女,2=未知) + */ + String readConverterExp() default ""; +} + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java new file mode 100644 index 0000000..f1f59ad --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.aop.annotion; + + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.common.constant.dictmap.base.SystemDict; + +import java.lang.annotation.*; + +@Inherited +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.METHOD}) +public @interface OperateLog { + String value() default ""; + + String key() default "id"; + + Class serviceClass() default IService.class; + + // 是否需要比较新旧数据 + boolean needDefaultCompare() default true; + + //操作类型 add update delete + String type() default "update"; + + Class dict() default SystemDict.class; +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java new file mode 100644 index 0000000..eb773ad --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java @@ -0,0 +1,328 @@ +package com.casic.missiles.modular.aop.annotion; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.modular.interfaces.dictmap.factory.DictFieldWrapperFactory; +import lombok.extern.slf4j.Slf4j; + +import java.beans.PropertyDescriptor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.*; + +import static com.casic.missiles.modular.interfaces.utils.Contrast.firstCharToLowerCase; +import static com.casic.missiles.modular.interfaces.utils.Contrast.firstCharToUpperCase; + +@Slf4j +public class ReflectionUtils { + + /** + * 直接读取对象属性值, 无视private/protected修饰符, 不经过getter函数. + * + * @param obj 读取的对象 + * @param fieldName 读取的列 + * @return 属性值 + */ + public static Object getFieldValue(final Object obj, final String fieldName) { + Field field = getAccessibleField(obj, fieldName); + if (field == null) { + throw new IllegalArgumentException("Could not find field [" + fieldName + "] on target [" + obj + "]"); + } + + Object result = null; + try { + result = field.get(obj); + } catch (IllegalAccessException e) { + log.error("不可能抛出的异常{}", e.getMessage()); + e.printStackTrace(); + } + return result; + } + + /** + * 循环向上转型, 获取对象的DeclaredField, 并强制设置为可访问.如向上转型到Object仍无法找到, 返回null. + * + * @param obj 查找的对象 + * @param fieldName 列名 + * @return 列 + */ + public static Field getAccessibleField(final Object obj, final String fieldName) { + for (Class superClass = obj.getClass(); superClass != Object.class; superClass = superClass.getSuperclass()) { + try { + Field field = superClass.getDeclaredField(fieldName); + makeAccessible(field); + return field; + } catch (NoSuchFieldException e) { // NOSONAR + // Field不在当前类定义,继续向上转型 + e.printStackTrace(); + continue; // new add + } + } + return null; + } + + /** + * 改变private/protected的成员变量为public,尽量不调用实际改动的语句,避免JDK的SecurityManager抱怨。 + * + * @param + */ + public static void makeAccessible(Field field) { + if ((!Modifier.isPublic(field.getModifiers()) || !Modifier.isPublic(field.getDeclaringClass().getModifiers()) || Modifier + .isFinal(field.getModifiers())) && !field.isAccessible()) { + field.setAccessible(true); + } + } + + /** + * 获取两个对象同名属性内容不相同的列表 + * + * @param class1 old对象 + * @param class2 new对象 + * @return 区别列表 + * @throws ClassNotFoundException 异常 + * @throws IllegalAccessException 异常 + */ + public static List> compareTwoClass(Object class1, Object class2) throws ClassNotFoundException, IllegalAccessException { + List> list = new ArrayList>(); + // 获取对象的class + Class clazz1 = class1.getClass(); + Class clazz2 = class2.getClass(); + // 获取对象的属性列表 + Field[] field1 = clazz1.getDeclaredFields(); + Field[] field2 = clazz2.getDeclaredFields(); + StringBuilder sb = new StringBuilder(); + // 遍历属性列表field1 + for (int i = 0; i < field1.length; i++) { + // 遍历属性列表field2 + for (int j = 0; j < field2.length; j++) { + // 如果field1[i]属性名与field2[j]属性名内容相同 + if (field1[i].getName().equals(field2[j].getName())) { + if (field1[i].getName().equals(field2[j].getName())) { + field1[i].setAccessible(true); + field2[j].setAccessible(true); + // 如果field1[i]属性值与field2[j]属性值内容不相同 + if (!compareTwo(field1[i].get(class1), field2[j].get(class2))) { + Map map2 = new HashMap(); + DataName name = field1[i].getAnnotation(DataName.class); + String fieldName = ""; + if (name != null) { + fieldName = name.name(); + } else { + fieldName = field1[i].getName(); + } + map2.put("name", fieldName); + map2.put("old", field1[i].get(class1)); + map2.put("new", field2[j].get(class2)); + list.add(map2); + } + break; + } + } + } + } + return list; + } + + /** + * 对比两个数据是否内容相同 + * + * @param object1 比较对象1 + * @param object2 比较对象2 + * @return boolean类型 + */ + public static boolean compareTwo(Object object1, Object object2) { + if (object1 == null && object2 == null) { + return true; + } + if (object1 == null && object2 != null) { + return false; + } + if (object1.equals(object2)) { + return true; + } + return false; + } + + public static String contrastObjByName(Class dictClass, String key, Object pojo1, Map pojo2) throws IllegalAccessException, InstantiationException { + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + String str = parseMutiKey(dictMap, key, pojo2) + ";;;"; + + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if (!"serialVersionUID".equals(field.getName())) { + String prefix = "get"; + int prefixLength = 3; + if (field.getType().getName().equals("java.lang.Boolean")) { + prefix = "is"; + prefixLength = 2; + } + + Method getMethod = null; + + try { + getMethod = clazz.getDeclaredMethod(prefix + firstCharToUpperCase(field.getName())); + } catch (NoSuchMethodException var22) { + System.err.println("this className:" + clazz.getName() + " is not methodName: " + var22.getMessage()); + continue; + } + + Object o1 = getMethod.invoke(pojo1); + Object o2 = pojo2.get(firstCharToLowerCase(getMethod.getName().substring(prefixLength))); + if (o1 != null && o2 != null) { + if (o1 instanceof Date) { + o1 = DateUtil.format(new Date(), "yyyy-MM-dd"); + } else if (o1 instanceof Integer) { + o2 = Integer.parseInt(o2.toString()); + } + + if (!o1.toString().equals(o2.toString())) { + if (i != 1) { + str = str + ";;;"; + } + + String fieldName = dictMap.get(field.getName()); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(field.getName()); + if (fieldWarpperMethodName != null) { + Object o1Warpper = DictFieldWrapperFactory.createFieldWrapper(o1, fieldWarpperMethodName); + Object o2Warpper = DictFieldWrapperFactory.createFieldWrapper(o2, fieldWarpperMethodName); + str = str + "字段名称:" + fieldName + ",旧值:" + o1Warpper + ",新值:" + o2Warpper; + } else { + str = str + "字段名称:" + fieldName + ",旧值:" + o1 + ",新值:" + o2; + } + + ++i; + } + } + } + } + } catch (Exception var23) { + var23.printStackTrace(); + } + + return str; + } + + public static String parseMutiKey(AbstractDictMap dictMap, String key, Map requests) { + StringBuilder sb = new StringBuilder(); + if (key.indexOf(",") != -1) { + String[] keys = key.split(","); + String[] var13 = keys; + int var14 = keys.length; + + for (int var7 = 0; var7 < var14; ++var7) { + String item = var13[var7].trim(); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(item); + Object value = requests.get(item); + if (fieldWarpperMethodName != null) { + Object valueWarpper = DictFieldWrapperFactory.createFieldWrapper(value, fieldWarpperMethodName); + sb.append(dictMap.get(item) + "=" + valueWarpper + ","); + } else { + sb.append(dictMap.get(item) + "=" + (ObjectUtil.isNotEmpty(value) ? value.toString() : "") + ","); + } + } + + return StrUtil.removeSuffix(sb.toString(), ","); + } else { + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(key); + Object value = requests.get(key); + if (fieldWarpperMethodName != null) { + Object valueWarpper = DictFieldWrapperFactory.createFieldWrapper(value, fieldWarpperMethodName); + sb.append(dictMap.get(key) + "=" + valueWarpper); + } else { + sb.append(dictMap.get(key) + "=" + (ObjectUtil.isNotEmpty(value) ? value.toString() : "")); + } + + return sb.toString(); + } + } + + public static String getDeleteKeys(Object pojo1) { + String str = ""; + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if ("keys".equals(field.getName())) { + PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); + Method getMethod = pd.getReadMethod(); + Object o1 = getMethod.invoke(pojo1); + return ObjectUtil.isNotEmpty(o1) ? o1.toString().replaceAll("\\[|]", "") : "".concat(",已删除"); + } + } + + } catch (Exception var21) { + var21.printStackTrace(); + } + return str; + } + + public static String contrastObj(Class dictClass, String key, Object pojo1, Map pojo2) throws IllegalAccessException, InstantiationException { + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); +// String str = parseMutiKey(dictMap, key, pojo2) + ";;;"; + String str = ""; + + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if (!"serialVersionUID".equals(field.getName())) { + PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); + Method getMethod = pd.getReadMethod(); + Object o1 = getMethod.invoke(pojo1); + Object o2 = pojo2.get(firstCharToLowerCase(getMethod.getName().substring(3))); + if (o1 != null && o2 != null) { + if (o1 instanceof Integer) { + o2 = Integer.parseInt(o2.toString()); + } else if (o1 instanceof Date) { + o1 = DateUtil.format((Date) o1, "yyyy-MM-dd HH:mm:ss"); + } + + if (!o1.toString().equals(o2.toString())) { + if (i != 1) { + str = str + ";"; + } + + String fieldName = dictMap.get(field.getName()); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(field.getName()); + if (fieldWarpperMethodName != null) { + Object o1Warpper = DictFieldWrapperFactory.createFieldWrapper(o1, fieldWarpperMethodName); + Object o2Warpper = DictFieldWrapperFactory.createFieldWrapper(o2, fieldWarpperMethodName); + str = str + fieldName + ":将【" + o1Warpper + "】,改为【" + o2Warpper + "】"; + } else { + str = str + fieldName + ":将【" + o1 + "】,改为【" + o2 + "】"; + } + + ++i; + } + } + } + } + } catch (Exception var21) { + var21.printStackTrace(); + } + + return str; + } + + +} \ No newline at end of file diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java index 7497ebf..18fd820 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java @@ -8,12 +8,14 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.StateDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.DeviceTypeDict; import com.casic.missiles.modular.device.dto.BaseDeviceTypeDTO; import com.casic.missiles.modular.device.dto.BaseDeviceTypeIdsDTO; import com.casic.missiles.modular.device.dto.SelectDTO; @@ -63,6 +65,7 @@ return ReturnUtil.success(super.packForBT(baseDeviceTypePage)); } + @OperateLog(value = "新增设备类型", key = "typeName,watchObject,isUsed,typeDescription", dict = DeviceTypeDict.class, type = "add") @ApiOperation("增加设备类型") @PostMapping("/add") @ResponseBody @@ -71,6 +74,7 @@ return ReturnUtil.success(iBaseDeviceTypeService.saveBaseDeviceType(baseDeviceType)); } + @OperateLog(value = "编辑设备类型", dict = DeviceTypeDict.class, serviceClass = IBaseDeviceTypeService.class, type = "edit") @ApiOperation("编辑设备类型") @PostMapping("/edit") @ResponseBody @@ -81,10 +85,11 @@ return ReturnUtil.success(iBaseDeviceTypeService.updateById(baseDeviceType)); } + @OperateLog(value = "删除设备类型", key = "typeName", dict = DeviceTypeDict.class, serviceClass = IBaseDeviceTypeService.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); @@ -113,7 +118,7 @@ public ReturnDTO selectList(@RequestBody BaseDeviceTypeIdsDTO request) { QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.in(request.getDeviceTypeList()!=null&&request.getDeviceTypeList().size()>0, "id", request.getDeviceTypeList()); + queryWrapper.in(request.getDeviceTypeList() != null && request.getDeviceTypeList().size() > 0, "id", request.getDeviceTypeList()); queryWrapper.eq("IS_USED", "1"); List baseDeviceTypes = iBaseDeviceTypeService.list(queryWrapper); List selectDTOS = new ArrayList<>(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java index 42d752d..54944e2 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java @@ -3,14 +3,15 @@ import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.IdDTO; -import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.ProductDict; import com.casic.missiles.modular.device.dto.BaseProductDTO; import com.casic.missiles.modular.device.dto.SelectProductDTO; import com.casic.missiles.modular.device.entity.BaseProduct; @@ -21,7 +22,6 @@ import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; -import java.util.List; import java.util.Objects; /** @@ -49,6 +49,7 @@ return ReturnUtil.success(super.packForBT(iBaseProductService.pageList(page, requestDTO))); } + @OperateLog(value = "新增产品", key = "productName,deviceType,deviceModel,manufacturerId,protocol,accessMethod,powerSupplyMode,dataService", dict = ProductDict.class, type = "add") @ApiOperation("新增") @PostMapping("/add") @ResponseBody @@ -58,6 +59,7 @@ } + @OperateLog(value = "编辑产品", dict = ProductDict.class, serviceClass = IBaseProductService.class, type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -68,10 +70,11 @@ return ReturnUtil.success(iBaseProductService.updateBaseProductById(baseProduct)); } + @OperateLog(value = "删除产品", key = "productName", dict = ProductDict.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 509bd7b..103acf2 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 @@ -9,6 +9,7 @@ import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; @@ -17,6 +18,7 @@ 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.aop.annotion.OperateLog; import com.casic.missiles.modular.device.dict.BusConfigDict; import com.casic.missiles.modular.device.dict.DeviceDict; import com.casic.missiles.modular.device.dto.*; @@ -65,7 +67,8 @@ } - @BussinessLog(value = "新增设备", key = "devcode,deviceName,deviceType,installDate,productId", dict = DeviceDict.class) + @OperateLog(value = "新增设备", key = "devcode,deviceType,productId," + + "valid,communicationType,simId,warrantyPeriod,tagNumber,leftLength,rightLength,", dict = DeviceDict.class,type = "add") @CacheEvict(value="busLedgersCache", key="#busDevice.getDevcode()") @ApiOperation("新增") @PostMapping("/add") @@ -75,7 +78,8 @@ } - @BussinessLog(value = "编辑设备", key = "devcode,deviceName,deviceType,installDate,productId", dict = DeviceDict.class) + @OperateLog(value = "编辑设备", key = "devcode,deviceType,installDate,productId," + + "leftLength,rightLength,communicationType,simId,warrantyPeriod", dict = DeviceDict.class,serviceClass = IBusDeviceService.class,type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -86,11 +90,12 @@ return ReturnUtil.success(iBusDeviceService.updateBusDevice(busDevice)); } + @OperateLog(value = "删除设备", key = "devcode", dict = DeviceDict.class,serviceClass = IBusDeviceService.class,type = "delete") @CacheEvict(value="busLedgersCache", allEntries = true) @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 31de56e..6f35acd 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 @@ -4,8 +4,8 @@ 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.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.page.PageFactory; @@ -16,11 +16,8 @@ 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.BusDeviceDTO; -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.BusDevice; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.CommonUtil; @@ -53,6 +50,7 @@ private final IBusLedgerPipeService iBusLedgerPipeService; private final IBaseExportService iBaseExportService; + private final AbstractDictService abstractDictService; @ApiOperation("新建点位") @PostMapping("/addPosition") @@ -60,10 +58,10 @@ 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,"安装位号已存!!!"); + if (busLedgerPipeList != null && busLedgerPipeList.size() > 0) { + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE, "安装位号已存!!!"); } - Long id =IdUtil.getSnowflake(1,2).nextId(); + Long id = IdUtil.getSnowflake(1, 2).nextId(); busLedgerPipe.setId(id); busLedgerPipe.setLedgerCode(busLedgerPipe.getTagNumber()); busLedgerPipe.setArea(CommonUtil.getAreaCode(busLedgerPipe.getPosition())); @@ -139,7 +137,11 @@ page.setCurrent(1); page.setSize(Integer.MAX_VALUE); Page devicePage = iBusLedgerPipeService.listPage(page, busLedgerPipeRequestDTO); + List records = devicePage.getRecords(); try { + for (BusLedgerPipe busLedgerPipe : records) { + busLedgerPipe.setLocationCategory(abstractDictService.getDictNameByCode("locationType", busLedgerPipe.getLocationCategory())); + } iBaseExportService.exportExcel(response, BusLedgerPipe.class, devicePage.getRecords(), ExportEnum.LEDGER_PIPE_EXPORT.getSheetName()); } catch (Exception e) { e.printStackTrace(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java index e87f3f8..8040c74 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java @@ -7,10 +7,13 @@ 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.DeletesDTO; import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.ProtocolDict; import com.casic.missiles.modular.device.dto.BusProtocolDTO; import com.casic.missiles.modular.device.entity.BusProtocol; import com.casic.missiles.modular.device.service.IBusProtocolService; @@ -35,10 +38,10 @@ @RestController @RequestMapping("/system/busProtocol") public class BusProtocolController extends ExportController { - + private final IBusProtocolService protocolService; - + @ApiOperation("查询分页接口") @PostMapping("/listPage") @ResponseBody @@ -47,9 +50,10 @@ queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getProtocolName()), "PROTOCOL_NAME", requestDTO.getProtocolName()); queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getProtocolCode()), "PROTOCOL_CODE", requestDTO.getProtocolCode()); Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(protocolService.page(page,queryWrapper))); + return ReturnUtil.success(super.packForBT(protocolService.page(page, queryWrapper))); } + @OperateLog(value = "新增协议", key = "protocolName,protocolCode,version,ip,description", dict = ProtocolDict.class, type = "add") @ApiOperation("新增") @PostMapping("/add") @ResponseBody @@ -58,6 +62,7 @@ return ReturnUtil.success(protocolService.save(busProtocol)); } + @OperateLog(value = "编辑协议", dict = ProtocolDict.class, serviceClass = IBusProtocolService.class, type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -68,10 +73,11 @@ return ReturnUtil.success(protocolService.updateById(busProtocol)); } + @OperateLog(value = "删除协议", key = "protocolName", dict = ProtocolDict.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 23ddee9..24c4712 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 @@ -2,7 +2,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.entity.BusDevice; import com.casic.missiles.util.InConditionDriver; @@ -46,27 +45,27 @@ @Param("orderColumn") String orderColumn, @Param("request") CommonRequestDTO request); - @Select("SELECT BFZT from bus_device where VALID=1 and DEVCODE= #{devcode} limit 1" ) - String getBfcf( @Param("devcode") String devcode); + @Select("SELECT BFZT from bus_device where VALID=1 and DEVCODE= #{devcode} limit 1") + String getBfcf(@Param("devcode") String devcode); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getMethaneData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getMethaneData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_tube_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getTubeOtherData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_tube_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getTubeOtherData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gasliquid_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getLGData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gasliquid_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getLGData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_monitor_pipe_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getMonitorPipeOtherData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_monitor_pipe_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getMonitorPipeOtherData(@Param("devcodes") List devcodes); - @Select("SELECT ALARM_THRESHOLD FROM `alarm_rule_device` where DEVCODE = #{devcode} order by ALARM_THRESHOLD asc " ) + @Select("SELECT ALARM_THRESHOLD FROM `alarm_rule_device` where DEVCODE = #{devcode} order by ALARM_THRESHOLD asc ") List getSpecialDeviceRule(@Param("devcode") String devcode); @Select(" select ar.ALARM_THRESHOLD from alarm_rule ar where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + @@ -81,4 +80,7 @@ "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") List getListByWellId(@Param("wellId") Long wellId); + + BusDeviceOperateLogDTO getByDeviceId(@Param("id") Long id); + } 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 c8583d1..18b16e5 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 @@ -346,7 +346,7 @@ ay.ALARM_CATEGORY, ac.ALARM_LEVEL as alarmLevelName, bm.NAME AS manufactureName, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.CANCEL_TIME) as cancelDuration + TIMESTAMPDIFF(MINUTE, rd.TS, rd.CANCEL_TIME) as cancelDuration FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -377,11 +377,14 @@ lr.ledgerName, lr.DEPTID, lr.id as ledgerId, + lr.lngGaode, + lr.latGaode, + lr.type as watchObject, bd.INSTALL_DATE, ay.ALARM_CATEGORY, ac.ALARM_LEVEL as alarmLevelName, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.CANCEL_TIME) as cancelDuration, - TIMESTAMPDIFF(MINUTE, rd.ALARM_TIME, rd.PROCESS_TIME) as processDuration, + TIMESTAMPDIFF(SECOND, rd.TS, rd.CANCEL_TIME) as cancelDuration, + TIMESTAMPDIFF(SECOND, rd.TS, rd.PROCESS_TIME) as processDuration, bm.`NAME` AS manufactureName FROM alarm_records rd LEFT JOIN bus_device bd ON rd.DEVCODE = bd.DEVCODE @@ -541,15 +544,22 @@ - SELECT count(1) as sum,"1" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where `STATUS` ='1' - and ar.EXCEPTION_TYPE='0' + + WITH alarm_temp as (SELECT + ar.id, + ar.ts, + lr.DEPTID + FROM + `alarm_records` ar + LEFT JOIN bus_device bd ON ar.DEVCODE = bd.DEVCODE + AND bd.VALID > 0 + LEFT JOIN bus_device_ledger bl ON bd.ID = bl.DEVICE_ID + AND bl.VALID = '1' + JOIN bus_ledger_all_view lr ON lr.ID = bl.LEDGER_ID + AND lr.type = bl.type + AND lr.VALID = '1' + AND lr.ledgerCode = ar.LEDGER_CODE + WHERE + `STATUS` = '1' + AND ar.EXCEPTION_TYPE = '0'),alarms_temp as( + SELECT ar.id, ar.ts, bl.DEPTID FROM `alarm_records` ar join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.EXCEPTION_TYPE='0' + ) + SELECT count(1) as sum,"1" as type FROM alarm_temp ar + + + and ar.DEPTID in (${deptStrs}) + + + UNION ALL + SELECT count(1) as sum,"2" as type FROM alarms_temp ar where ar.TS>=CURDATE() + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"2" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>=CURDATE() - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"3" as type FROM alarms_temp ar where ar.TS>= CURDATE() - INTERVAL DAYOFWEEK(CURDATE()) - 2 DAY + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"3" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>= CURDATE() - INTERVAL DAYOFWEEK(CURDATE()) - 2 DAY - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"4" as type FROM alarms_temp ar where ar.TS>=DATE_FORMAT(NOW(),'%Y-%m-01') + - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) UNION ALL - SELECT count(1) as sum,"4" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>=DATE_FORMAT(NOW(),'%Y-%m-01') - and ar.EXCEPTION_TYPE='0' + SELECT count(1) as sum,"5" as type FROM alarms_temp ar where ar.TS>= DATE_FORMAT(CURDATE(), '%Y-01-01') + - and bl.DEPTID in (${deptStrs}) - - UNION ALL - SELECT count(1) as sum,"5" as type FROM `alarm_records` ar left join bus_ledger_all_view bl ON ar.LEDGER_CODE = bl.ledgerCode where ar.TS>= DATE_FORMAT(CURDATE(), '%Y-01-01') - and ar.EXCEPTION_TYPE='0' - - and bl.DEPTID in (${deptStrs}) + and ar.DEPTID in (${deptStrs}) diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java index 3e0edd6..9dab3a7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java @@ -71,4 +71,18 @@ private Long deptid; + @ApiModelProperty("经度") + private String lngGaode; + + @ApiModelProperty("纬度") + private String latGaode; + + @ApiModelProperty("监测类型") + private String watchObject; + + @ApiModelProperty("点位id") + private Long ledgerId; + + + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java index e938da8..60464c4 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java @@ -12,6 +12,7 @@ private String deviceType; private String tagNumber; private String ledgerCode; + private String ledgerName; private String place; //台账类型 private String type; 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 ac4cabe..e623df7 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 @@ -44,6 +44,7 @@ import static cn.hutool.core.date.DateUnit.DAY; import static com.casic.missiles.util.TimeConvertUtil.TimeConverter; +import static com.casic.missiles.util.TimeConvertUtil.TimeConverterSecond; /** *

@@ -180,8 +181,8 @@ public DeviceAlarmDetailDTO deviceAlarmDetail(Long id) { DeviceAlarmDetailDTO alarmDetail = this.baseMapper.deviceAlarmDetail(id); - alarmDetail.setCancelDuration(TimeConverter(alarmDetail.getCancelDuration())); - alarmDetail.setProcessDuration(TimeConverter(alarmDetail.getProcessDuration())); + alarmDetail.setCancelDuration(TimeConverterSecond(alarmDetail.getCancelDuration())); + alarmDetail.setProcessDuration(TimeConverterSecond(alarmDetail.getProcessDuration())); alarmDetail.setDeptName(ObjectUtil.isNotEmpty(alarmDetail.getDeptid()) ? commonServer.getDeptNamesByDeptId(alarmDetail.getDeptid()) : ""); // alarmDetail.setAddress(alarmDetail.getTagNumber().concat("|").concat(alarmDetail.getLedgerName())); alarmDetail.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmDetail.getAlarmCategory())); @@ -524,16 +525,26 @@ @Override public void cancelDeviceAlarm(String devCode) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("DEVCODE", devCode); - updateWrapper.eq("EXCEPTION_TYPE", "1"); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE", devCode); + queryWrapper.eq("EXCEPTION_TYPE", "1"); //只有挂起和已处置的才消 // updateWrapper.ge("PROCESS_STATUS", "3"); - updateWrapper.eq("STATUS", "1"); - updateWrapper.set("STATUS", "0"); - updateWrapper.set("CANCEL_TIME", new Date()); - this.update(updateWrapper); - //toDo:需要加流程取消日志 + queryWrapper.eq("STATUS", "1"); + List alarmRecordsList = this.list(queryWrapper); + if (alarmRecordsList != null && alarmRecordsList.size() > 0) { + alarmRecordsList.forEach(alarmRecords -> { + alarmRecords.setStatus("0"); + alarmRecords.setCancelTime(new Date()); + alarmRecords.setPreProcessStatus(alarmRecords.getProcessStatus()); + alarmRecords.setProcessStatus(ApprovalStatusEnum.FINISHED.getCode()); + this.updateById(alarmRecords); + }); + //添加流程日志 + approvalLogMapper.insert(new ApprovalLog(alarmRecordsList.get(0).getId(), "1", + "", ApprovalStatusEnum.FINISHED.getCode(), + null)); + } } @Override @@ -674,8 +685,12 @@ AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), data.concat("%LEL"), data, - alarmRuleResponseDTO.getAlarmLevelId(),DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmLevelId(), DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmRuleResponseDTO.getAlarmTypeName(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -721,7 +736,7 @@ @Override - public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime,List busWellDTOList, + public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime, List busWellDTOList, Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { @@ -730,8 +745,12 @@ try { AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, - alarmLevelId, DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmLevelId, DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmTypeName, + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace() + , "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -793,7 +812,11 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.get().getAlarmTypeId(), alarmRuleResponseDTO.get().getAlarmTypeName(), alarmRuleResponseDTO.get().getAlarmLevelId(), DateUtil.parse(logTime), - alarmRuleResponseDTO.get().getAlarmThreshold(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "1"); + alarmRuleResponseDTO.get().getAlarmThreshold(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "1"); this.save(alarmRecords); } catch (Exception e) { e.printStackTrace(); @@ -846,8 +869,8 @@ * @param cell */ @Override - public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent,String logTime) { - this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent,DateUtil.parse(logTime)); + public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent, String logTime) { + this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent, DateUtil.parse(logTime)); } @Override @@ -903,7 +926,10 @@ offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), - offDeviceDTO.getPlace(), "1"); + ObjectUtil.isNotEmpty(offDeviceDTO.getLedgerName()) ? + offDeviceDTO.getTagNumber().concat("|"). + concat(offDeviceDTO.getLedgerName()) : + offDeviceDTO.getPlace(), "1"); alarmRecordsList.add(alarmRecords); ledgers.add(offDeviceDTO); } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java new file mode 100644 index 0000000..cb554b9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.data.dto; + + +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class PanDataDTO implements Serializable { + + private static final long serialVersionUID = 1232822221212L; + + private String dataTime; + + private String attributeType; + + private String dataValue; + + private String deviceCode; + + + +} 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 index a082d00..2a943ad 100644 --- 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 @@ -23,6 +23,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -37,6 +38,7 @@ * @author zt * @since 2025-01-22 */ +@Slf4j @RequiredArgsConstructor @Service public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { @@ -71,8 +73,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -80,8 +81,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}",devCode, e); } } @@ -141,8 +141,7 @@ } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -222,8 +221,10 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); +// e.printStackTrace(); +// log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); + } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java index dd80611..cd24860 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java @@ -83,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -124,8 +123,7 @@ busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -200,8 +198,7 @@ alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } //低电量报警处理 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 302b446..f0def39 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 @@ -76,8 +76,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -85,8 +84,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -133,8 +131,7 @@ if (i < jsonArray.size() - 1) continue; busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -217,8 +214,7 @@ } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } 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 e5ba8f7..a02af88 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataMonitorPipeOtherServiceImpl extends ServiceImpl implements IDataMonitorPipeOtherService, IDataAbstractService { @@ -73,8 +75,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -116,8 +116,7 @@ //2.写入新的报警 alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + log.error("处理报警时发生异常,devcode:{},e:{}", devCode, e); } } } @@ -160,8 +159,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmEventCode)); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -341,8 +339,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag || ObjectUtil.isNotEmpty(alarmContent) ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java index 5dc8c2b..f383690 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java @@ -2,7 +2,6 @@ import cn.hutool.core.date.DateUtil; 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; @@ -13,15 +12,20 @@ import com.casic.missiles.modular.alarm.service.IAlarmRuleService; import com.casic.missiles.modular.data.dao.DataGasMapper; import com.casic.missiles.modular.data.dao.DataPanGasMapper; +import com.casic.missiles.modular.data.dto.PanDataDTO; import com.casic.missiles.modular.data.entity.DataPanGas; import com.casic.missiles.modular.data.service.IDataPanGasService; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.CommonUtil; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonToken; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.io.IOException; import java.util.Date; import java.util.List; import java.util.Map; @@ -68,78 +72,179 @@ } - @Transactional @Override public boolean processAcceptGasData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); - JSONArray jsonArray = jsonObject.getJSONArray("data"); - String devCode = ""; - for (int i = 0; i < jsonArray.size(); i++) { - try { - devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); - if (ObjectUtil.isEmpty(devCode)) continue; - List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); - String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); - String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); - //暂只存浓度 - if ("2".equals(attributeType)) continue; - String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); - gas = String.format("%.2f", Double.valueOf(gas)); - //1.存数据 - save(DataPanGas.builder() - .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") - .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") - .deviceCode(devCode) - .concentration(gas) - .logtime(DateUtil.parseDateTime(dataTime)) - .build());//存储采集数据 - //2.有无超限处理流程(判断最后一条数据) -// if (i < jsonArray.size() - 1) continue; - - //3.清除设备告警 - alarmRecordsService.cancelDeviceAlarm(devCode); - //4.存报警 - //若没绑场站,则不产生报警 - boolean alarmFlag = false; - String bfcf = busDeviceService.getBfcf(devCode); - 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))) { - dataTime = dataTime.replaceAll("-", ""); - dataTime = dataTime.replaceAll(":", ""); - dataTime = dataTime.replaceAll("\\s+", ""); - alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); - } - break; - } - } - } - //5.清数据报警 - if (!alarmFlag) { - alarmRecordsService.cancelDataAlarm(devCode); - } - //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); - //7.更新监测井状态 (1:正常,2:报警) - if (busWellDTOList != null && busWellDTOList.size() > 0) { - alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); - } - } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + JsonFactory factory = new JsonFactory(); + try (JsonParser parser = factory.createParser(jsonObject.getString("data"))) { + // 定位到 "data" 数组 + while (parser.nextToken() != JsonToken.START_ARRAY) { + parser.nextToken(); } + // 逐条处理数据 + while (parser.nextToken() != JsonToken.END_ARRAY) { + if (parser.getCurrentToken() == JsonToken.START_OBJECT) { + processSingleData(parseJsonObject(parser)); + } + + } + } catch (IOException e) { + e.printStackTrace(); } + return true; } + private PanDataDTO parseJsonObject(JsonParser parser) throws IOException { + PanDataDTO panDataDTO = new PanDataDTO(); + while (parser.nextToken() != JsonToken.END_OBJECT) { + String fieldName = parser.getCurrentName(); + if ("dataTime".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataTime(parser.getText()); + } else if ("attributeType".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setAttributeType(parser.getText()); + } else if ("dataValue".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataValue(parser.getText()); + } else if ("deviceCode".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDeviceCode(parser.getText()); + } + } + return panDataDTO; + } + + + private void processSingleData(PanDataDTO panDataDTO) { + try { + String devCode = panDataDTO.getDeviceCode(); + if (ObjectUtil.isEmpty(devCode)) return; + List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); + String gas = panDataDTO.getDataValue(); + String attributeType = panDataDTO.getAttributeType(); + //暂只存浓度 + if ("2".equals(attributeType)) return; + String dataTime = panDataDTO.getDataTime(); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataPanGas.builder() + .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .deviceCode(devCode) + .concentration(gas) + .logtime(DateUtil.parseDateTime(dataTime)) + .build());//存储采集数据 + + boolean alarmFlag = false; + String bfcf = busDeviceService.getBfcf(devCode); + 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))) { +// dataTime = dataTime.replaceAll("-", ""); +// dataTime = dataTime.replaceAll(":", ""); +// dataTime = dataTime.replaceAll("\\s+", ""); + alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); + //7.更新监测井状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + log.error("处理云台数据时发生异常,devcode:{},data:{},e:{}", panDataDTO.getDeviceCode(), panDataDTO.toString(), e); + } + } + + +// @Transactional +// @Override +// public boolean processAcceptGasData(Map dataParams) { +// JSONObject jsonObject = new JSONObject(dataParams); +// JSONArray jsonArray = jsonObject.getJSONArray("data"); +// String devCode = ""; +// for (int i = 0; i < jsonArray.size(); i++) { +// try { +// devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); +// if (ObjectUtil.isEmpty(devCode)) continue; +// List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); +// String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); +// String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); +// //暂只存浓度 +// if ("2".equals(attributeType)) continue; +// String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); +// gas = String.format("%.2f", Double.valueOf(gas)); +// //1.存数据 +// save(DataPanGas.builder() +// .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") +// .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") +// .deviceCode(devCode) +// .concentration(gas) +// .logtime(DateUtil.parseDateTime(dataTime)) +// .build());//存储采集数据 +// //2.有无超限处理流程(判断最后一条数据) +//// if (i < jsonArray.size() - 1) continue; +// +// //3.清除设备告警 +//// alarmRecordsService.cancelDeviceAlarm(devCode); +// //4.存报警 +// //若没绑场站,则不产生报警 +// boolean alarmFlag = false; +// String bfcf = busDeviceService.getBfcf(devCode); +// 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))) { +//// dataTime = dataTime.replaceAll("-", ""); +//// dataTime = dataTime.replaceAll(":", ""); +//// dataTime = dataTime.replaceAll("\\s+", ""); +// alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); +// } +// break; +// } +// } +// } +// //5.清数据报警 +// if (!alarmFlag) { +// alarmRecordsService.cancelDataAlarm(devCode); +// } +// //6.更新电量及状态 (1:正常,2:报警) +// alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); +// //7.更新监测井状态 (1:正常,2:报警) +// if (busWellDTOList != null && busWellDTOList.size() > 0) { +// alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); +// } +// } catch (Exception e) { +// log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); +// } +// } +// return true; +// } + @Override public boolean acceptAlarmData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); 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 37d731d..a17953b 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataTubeOtherServiceImpl extends ServiceImpl implements IDataTubeOtherService, IDataAbstractService { @@ -73,7 +75,7 @@ } } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,7 +84,7 @@ imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -122,8 +124,8 @@ } //特殊处理消警 if ("CancelWaterImmersionAlarm".equals(alarmType)) { - if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { - alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + if (alarmRecordsService.isWatchAlarms(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelWatchAlarms(devCode, "WaterImmersionAlarm"); } continue; } @@ -146,8 +148,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmType)); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -227,8 +228,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java new file mode 100644 index 0000000..3be65dd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java @@ -0,0 +1,170 @@ +package com.casic.missiles.modular.aop; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.aop.annotion.ReflectionUtils; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.modular.interfaces.log.LogManager; +import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.Serializable; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Aspect +@Component +public class OperateLogAspect { + private Logger log = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private ApplicationContext applicationContext; + + public static volatile Map oldMap = new HashMap<>(); + + public OperateLogAspect() { + } + + @Pointcut("@annotation(com.casic.missiles.modular.aop.annotion.OperateLog)") + public void cutService() { + } + + @Around("cutService()") + public Object recordSysLog(ProceedingJoinPoint point) throws Throwable { + Object result = point.proceed(); + + try { + this.handle(point); + } catch (Exception var4) { + this.log.error("日志记录出错!", var4); + } + + return result; + } + + /** + * 处理请求前执行 + */ + @Before(value = "@annotation(operateLog)") + public void boBefore(JoinPoint joinPoint, OperateLog operateLog) { + Object info = joinPoint.getArgs()[0]; + if ("edit".equals(operateLog.type()) && operateLog.needDefaultCompare()) { + Class cls = operateLog.serviceClass(); + IService service = (IService) applicationContext.getBean(cls); + Object result; + if (service instanceof IBusDeviceService) { + result = ((IBusDeviceService) service).getByDeviceId((Long) ReflectionUtils.getFieldValue(info, "id")); + } else + result = service.getById((Serializable) ReflectionUtils.getFieldValue(info, "id")); + oldMap = (Map) objectToMap(result); // 存储修改前的对象 + } + } + + private void handle(ProceedingJoinPoint point) throws Exception { + Signature sig = point.getSignature(); + MethodSignature msig = null; + if (!(sig instanceof MethodSignature)) { + throw new IllegalArgumentException("该注解只能用于方法"); + } else { + msig = (MethodSignature) sig; + Object target = point.getTarget(); + Method currentMethod = target.getClass().getMethod(msig.getName(), msig.getParameterTypes()); + String methodName = currentMethod.getName(); + AuthUser user = ShiroKit.getUser(); + if (null != user) { + String className = point.getTarget().getClass().getName(); + Object[] params = point.getArgs(); + OperateLog annotation = (OperateLog) currentMethod.getAnnotation(OperateLog.class); + String bussinessName = annotation.value(); + String key = annotation.key(); + Class dictClass = annotation.dict(); + String sb = argsArrayToString(params); + String msg = sb; + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + if ("add".equals(annotation.type())) { + Map parameters = (Map) objectToMap(params[0]); + msg = CollectionUtils.isEmpty(parameters) ? sb : ReflectionUtils.parseMutiKey(dictMap, key, parameters); + } else if ("edit".equals(annotation.type())) { + msg = CollectionUtils.isEmpty(oldMap) ? sb : ReflectionUtils.contrastObj(dictClass, key, params[0], oldMap); + }else if("delete".equals(annotation.type())){ + msg=dictMap.get(annotation.key())+":"+ReflectionUtils.getDeleteKeys(params[0]); + } + LogManager.me().executeLog(LogTaskFactory.bussinessLog(user.getId(), bussinessName, className, methodName, msg)); + } + } + } + + + /** + * 参数拼装 + */ + private String argsArrayToString(Object[] paramsArray) { + Gson gson = new GsonBuilder().create(); + String params = ""; + if (paramsArray != null && paramsArray.length > 0) { + for (int i = 0; i < paramsArray.length; i++) { + if (!isFilterObject(paramsArray[i])) { + params += gson.toJson(paramsArray[i]) + " & "; + } + } + } + return params.trim(); + } + + + /** + * 判断是否需要过滤的对象。 + * + * @param o 对象信息。 + * @return 如果是需要过滤的对象,则返回true;否则返回false。 + */ + public boolean isFilterObject(final Object o) { + return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse; + } + + private Map objectToMap(Object obj) { + if (obj == null) { + return null; + } + ObjectMapper mapper = new ObjectMapper(); + mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + // 如果使用JPA请自己打开这条配置 + // mapper.addMixIn(Object.class, IgnoreHibernatePropertiesInJackson.class); + Map mappedObject = mapper.convertValue(obj, Map.class); + return mappedObject; + + + } +} + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java new file mode 100644 index 0000000..77afa9c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.aop.annotion; + +import java.lang.annotation.*; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.FIELD}) +@Documented +public @interface DataName { + String name() default ""; // 字段名称 + + /** + * 读取枚举内容转义表达式 (如: 0=男,1=女,2=未知) + */ + String readConverterExp() default ""; +} + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java new file mode 100644 index 0000000..f1f59ad --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.aop.annotion; + + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.common.constant.dictmap.base.SystemDict; + +import java.lang.annotation.*; + +@Inherited +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.METHOD}) +public @interface OperateLog { + String value() default ""; + + String key() default "id"; + + Class serviceClass() default IService.class; + + // 是否需要比较新旧数据 + boolean needDefaultCompare() default true; + + //操作类型 add update delete + String type() default "update"; + + Class dict() default SystemDict.class; +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java new file mode 100644 index 0000000..eb773ad --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java @@ -0,0 +1,328 @@ +package com.casic.missiles.modular.aop.annotion; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.modular.interfaces.dictmap.factory.DictFieldWrapperFactory; +import lombok.extern.slf4j.Slf4j; + +import java.beans.PropertyDescriptor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.*; + +import static com.casic.missiles.modular.interfaces.utils.Contrast.firstCharToLowerCase; +import static com.casic.missiles.modular.interfaces.utils.Contrast.firstCharToUpperCase; + +@Slf4j +public class ReflectionUtils { + + /** + * 直接读取对象属性值, 无视private/protected修饰符, 不经过getter函数. + * + * @param obj 读取的对象 + * @param fieldName 读取的列 + * @return 属性值 + */ + public static Object getFieldValue(final Object obj, final String fieldName) { + Field field = getAccessibleField(obj, fieldName); + if (field == null) { + throw new IllegalArgumentException("Could not find field [" + fieldName + "] on target [" + obj + "]"); + } + + Object result = null; + try { + result = field.get(obj); + } catch (IllegalAccessException e) { + log.error("不可能抛出的异常{}", e.getMessage()); + e.printStackTrace(); + } + return result; + } + + /** + * 循环向上转型, 获取对象的DeclaredField, 并强制设置为可访问.如向上转型到Object仍无法找到, 返回null. + * + * @param obj 查找的对象 + * @param fieldName 列名 + * @return 列 + */ + public static Field getAccessibleField(final Object obj, final String fieldName) { + for (Class superClass = obj.getClass(); superClass != Object.class; superClass = superClass.getSuperclass()) { + try { + Field field = superClass.getDeclaredField(fieldName); + makeAccessible(field); + return field; + } catch (NoSuchFieldException e) { // NOSONAR + // Field不在当前类定义,继续向上转型 + e.printStackTrace(); + continue; // new add + } + } + return null; + } + + /** + * 改变private/protected的成员变量为public,尽量不调用实际改动的语句,避免JDK的SecurityManager抱怨。 + * + * @param + */ + public static void makeAccessible(Field field) { + if ((!Modifier.isPublic(field.getModifiers()) || !Modifier.isPublic(field.getDeclaringClass().getModifiers()) || Modifier + .isFinal(field.getModifiers())) && !field.isAccessible()) { + field.setAccessible(true); + } + } + + /** + * 获取两个对象同名属性内容不相同的列表 + * + * @param class1 old对象 + * @param class2 new对象 + * @return 区别列表 + * @throws ClassNotFoundException 异常 + * @throws IllegalAccessException 异常 + */ + public static List> compareTwoClass(Object class1, Object class2) throws ClassNotFoundException, IllegalAccessException { + List> list = new ArrayList>(); + // 获取对象的class + Class clazz1 = class1.getClass(); + Class clazz2 = class2.getClass(); + // 获取对象的属性列表 + Field[] field1 = clazz1.getDeclaredFields(); + Field[] field2 = clazz2.getDeclaredFields(); + StringBuilder sb = new StringBuilder(); + // 遍历属性列表field1 + for (int i = 0; i < field1.length; i++) { + // 遍历属性列表field2 + for (int j = 0; j < field2.length; j++) { + // 如果field1[i]属性名与field2[j]属性名内容相同 + if (field1[i].getName().equals(field2[j].getName())) { + if (field1[i].getName().equals(field2[j].getName())) { + field1[i].setAccessible(true); + field2[j].setAccessible(true); + // 如果field1[i]属性值与field2[j]属性值内容不相同 + if (!compareTwo(field1[i].get(class1), field2[j].get(class2))) { + Map map2 = new HashMap(); + DataName name = field1[i].getAnnotation(DataName.class); + String fieldName = ""; + if (name != null) { + fieldName = name.name(); + } else { + fieldName = field1[i].getName(); + } + map2.put("name", fieldName); + map2.put("old", field1[i].get(class1)); + map2.put("new", field2[j].get(class2)); + list.add(map2); + } + break; + } + } + } + } + return list; + } + + /** + * 对比两个数据是否内容相同 + * + * @param object1 比较对象1 + * @param object2 比较对象2 + * @return boolean类型 + */ + public static boolean compareTwo(Object object1, Object object2) { + if (object1 == null && object2 == null) { + return true; + } + if (object1 == null && object2 != null) { + return false; + } + if (object1.equals(object2)) { + return true; + } + return false; + } + + public static String contrastObjByName(Class dictClass, String key, Object pojo1, Map pojo2) throws IllegalAccessException, InstantiationException { + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + String str = parseMutiKey(dictMap, key, pojo2) + ";;;"; + + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if (!"serialVersionUID".equals(field.getName())) { + String prefix = "get"; + int prefixLength = 3; + if (field.getType().getName().equals("java.lang.Boolean")) { + prefix = "is"; + prefixLength = 2; + } + + Method getMethod = null; + + try { + getMethod = clazz.getDeclaredMethod(prefix + firstCharToUpperCase(field.getName())); + } catch (NoSuchMethodException var22) { + System.err.println("this className:" + clazz.getName() + " is not methodName: " + var22.getMessage()); + continue; + } + + Object o1 = getMethod.invoke(pojo1); + Object o2 = pojo2.get(firstCharToLowerCase(getMethod.getName().substring(prefixLength))); + if (o1 != null && o2 != null) { + if (o1 instanceof Date) { + o1 = DateUtil.format(new Date(), "yyyy-MM-dd"); + } else if (o1 instanceof Integer) { + o2 = Integer.parseInt(o2.toString()); + } + + if (!o1.toString().equals(o2.toString())) { + if (i != 1) { + str = str + ";;;"; + } + + String fieldName = dictMap.get(field.getName()); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(field.getName()); + if (fieldWarpperMethodName != null) { + Object o1Warpper = DictFieldWrapperFactory.createFieldWrapper(o1, fieldWarpperMethodName); + Object o2Warpper = DictFieldWrapperFactory.createFieldWrapper(o2, fieldWarpperMethodName); + str = str + "字段名称:" + fieldName + ",旧值:" + o1Warpper + ",新值:" + o2Warpper; + } else { + str = str + "字段名称:" + fieldName + ",旧值:" + o1 + ",新值:" + o2; + } + + ++i; + } + } + } + } + } catch (Exception var23) { + var23.printStackTrace(); + } + + return str; + } + + public static String parseMutiKey(AbstractDictMap dictMap, String key, Map requests) { + StringBuilder sb = new StringBuilder(); + if (key.indexOf(",") != -1) { + String[] keys = key.split(","); + String[] var13 = keys; + int var14 = keys.length; + + for (int var7 = 0; var7 < var14; ++var7) { + String item = var13[var7].trim(); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(item); + Object value = requests.get(item); + if (fieldWarpperMethodName != null) { + Object valueWarpper = DictFieldWrapperFactory.createFieldWrapper(value, fieldWarpperMethodName); + sb.append(dictMap.get(item) + "=" + valueWarpper + ","); + } else { + sb.append(dictMap.get(item) + "=" + (ObjectUtil.isNotEmpty(value) ? value.toString() : "") + ","); + } + } + + return StrUtil.removeSuffix(sb.toString(), ","); + } else { + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(key); + Object value = requests.get(key); + if (fieldWarpperMethodName != null) { + Object valueWarpper = DictFieldWrapperFactory.createFieldWrapper(value, fieldWarpperMethodName); + sb.append(dictMap.get(key) + "=" + valueWarpper); + } else { + sb.append(dictMap.get(key) + "=" + (ObjectUtil.isNotEmpty(value) ? value.toString() : "")); + } + + return sb.toString(); + } + } + + public static String getDeleteKeys(Object pojo1) { + String str = ""; + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if ("keys".equals(field.getName())) { + PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); + Method getMethod = pd.getReadMethod(); + Object o1 = getMethod.invoke(pojo1); + return ObjectUtil.isNotEmpty(o1) ? o1.toString().replaceAll("\\[|]", "") : "".concat(",已删除"); + } + } + + } catch (Exception var21) { + var21.printStackTrace(); + } + return str; + } + + public static String contrastObj(Class dictClass, String key, Object pojo1, Map pojo2) throws IllegalAccessException, InstantiationException { + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); +// String str = parseMutiKey(dictMap, key, pojo2) + ";;;"; + String str = ""; + + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if (!"serialVersionUID".equals(field.getName())) { + PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); + Method getMethod = pd.getReadMethod(); + Object o1 = getMethod.invoke(pojo1); + Object o2 = pojo2.get(firstCharToLowerCase(getMethod.getName().substring(3))); + if (o1 != null && o2 != null) { + if (o1 instanceof Integer) { + o2 = Integer.parseInt(o2.toString()); + } else if (o1 instanceof Date) { + o1 = DateUtil.format((Date) o1, "yyyy-MM-dd HH:mm:ss"); + } + + if (!o1.toString().equals(o2.toString())) { + if (i != 1) { + str = str + ";"; + } + + String fieldName = dictMap.get(field.getName()); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(field.getName()); + if (fieldWarpperMethodName != null) { + Object o1Warpper = DictFieldWrapperFactory.createFieldWrapper(o1, fieldWarpperMethodName); + Object o2Warpper = DictFieldWrapperFactory.createFieldWrapper(o2, fieldWarpperMethodName); + str = str + fieldName + ":将【" + o1Warpper + "】,改为【" + o2Warpper + "】"; + } else { + str = str + fieldName + ":将【" + o1 + "】,改为【" + o2 + "】"; + } + + ++i; + } + } + } + } + } catch (Exception var21) { + var21.printStackTrace(); + } + + return str; + } + + +} \ No newline at end of file diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java index 7497ebf..18fd820 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java @@ -8,12 +8,14 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.StateDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.DeviceTypeDict; import com.casic.missiles.modular.device.dto.BaseDeviceTypeDTO; import com.casic.missiles.modular.device.dto.BaseDeviceTypeIdsDTO; import com.casic.missiles.modular.device.dto.SelectDTO; @@ -63,6 +65,7 @@ return ReturnUtil.success(super.packForBT(baseDeviceTypePage)); } + @OperateLog(value = "新增设备类型", key = "typeName,watchObject,isUsed,typeDescription", dict = DeviceTypeDict.class, type = "add") @ApiOperation("增加设备类型") @PostMapping("/add") @ResponseBody @@ -71,6 +74,7 @@ return ReturnUtil.success(iBaseDeviceTypeService.saveBaseDeviceType(baseDeviceType)); } + @OperateLog(value = "编辑设备类型", dict = DeviceTypeDict.class, serviceClass = IBaseDeviceTypeService.class, type = "edit") @ApiOperation("编辑设备类型") @PostMapping("/edit") @ResponseBody @@ -81,10 +85,11 @@ return ReturnUtil.success(iBaseDeviceTypeService.updateById(baseDeviceType)); } + @OperateLog(value = "删除设备类型", key = "typeName", dict = DeviceTypeDict.class, serviceClass = IBaseDeviceTypeService.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); @@ -113,7 +118,7 @@ public ReturnDTO selectList(@RequestBody BaseDeviceTypeIdsDTO request) { QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.in(request.getDeviceTypeList()!=null&&request.getDeviceTypeList().size()>0, "id", request.getDeviceTypeList()); + queryWrapper.in(request.getDeviceTypeList() != null && request.getDeviceTypeList().size() > 0, "id", request.getDeviceTypeList()); queryWrapper.eq("IS_USED", "1"); List baseDeviceTypes = iBaseDeviceTypeService.list(queryWrapper); List selectDTOS = new ArrayList<>(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java index 42d752d..54944e2 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java @@ -3,14 +3,15 @@ import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.IdDTO; -import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.ProductDict; import com.casic.missiles.modular.device.dto.BaseProductDTO; import com.casic.missiles.modular.device.dto.SelectProductDTO; import com.casic.missiles.modular.device.entity.BaseProduct; @@ -21,7 +22,6 @@ import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; -import java.util.List; import java.util.Objects; /** @@ -49,6 +49,7 @@ return ReturnUtil.success(super.packForBT(iBaseProductService.pageList(page, requestDTO))); } + @OperateLog(value = "新增产品", key = "productName,deviceType,deviceModel,manufacturerId,protocol,accessMethod,powerSupplyMode,dataService", dict = ProductDict.class, type = "add") @ApiOperation("新增") @PostMapping("/add") @ResponseBody @@ -58,6 +59,7 @@ } + @OperateLog(value = "编辑产品", dict = ProductDict.class, serviceClass = IBaseProductService.class, type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -68,10 +70,11 @@ return ReturnUtil.success(iBaseProductService.updateBaseProductById(baseProduct)); } + @OperateLog(value = "删除产品", key = "productName", dict = ProductDict.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 509bd7b..103acf2 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 @@ -9,6 +9,7 @@ import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; @@ -17,6 +18,7 @@ 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.aop.annotion.OperateLog; import com.casic.missiles.modular.device.dict.BusConfigDict; import com.casic.missiles.modular.device.dict.DeviceDict; import com.casic.missiles.modular.device.dto.*; @@ -65,7 +67,8 @@ } - @BussinessLog(value = "新增设备", key = "devcode,deviceName,deviceType,installDate,productId", dict = DeviceDict.class) + @OperateLog(value = "新增设备", key = "devcode,deviceType,productId," + + "valid,communicationType,simId,warrantyPeriod,tagNumber,leftLength,rightLength,", dict = DeviceDict.class,type = "add") @CacheEvict(value="busLedgersCache", key="#busDevice.getDevcode()") @ApiOperation("新增") @PostMapping("/add") @@ -75,7 +78,8 @@ } - @BussinessLog(value = "编辑设备", key = "devcode,deviceName,deviceType,installDate,productId", dict = DeviceDict.class) + @OperateLog(value = "编辑设备", key = "devcode,deviceType,installDate,productId," + + "leftLength,rightLength,communicationType,simId,warrantyPeriod", dict = DeviceDict.class,serviceClass = IBusDeviceService.class,type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -86,11 +90,12 @@ return ReturnUtil.success(iBusDeviceService.updateBusDevice(busDevice)); } + @OperateLog(value = "删除设备", key = "devcode", dict = DeviceDict.class,serviceClass = IBusDeviceService.class,type = "delete") @CacheEvict(value="busLedgersCache", allEntries = true) @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 31de56e..6f35acd 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 @@ -4,8 +4,8 @@ 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.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.page.PageFactory; @@ -16,11 +16,8 @@ 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.BusDeviceDTO; -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.BusDevice; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.CommonUtil; @@ -53,6 +50,7 @@ private final IBusLedgerPipeService iBusLedgerPipeService; private final IBaseExportService iBaseExportService; + private final AbstractDictService abstractDictService; @ApiOperation("新建点位") @PostMapping("/addPosition") @@ -60,10 +58,10 @@ 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,"安装位号已存!!!"); + if (busLedgerPipeList != null && busLedgerPipeList.size() > 0) { + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE, "安装位号已存!!!"); } - Long id =IdUtil.getSnowflake(1,2).nextId(); + Long id = IdUtil.getSnowflake(1, 2).nextId(); busLedgerPipe.setId(id); busLedgerPipe.setLedgerCode(busLedgerPipe.getTagNumber()); busLedgerPipe.setArea(CommonUtil.getAreaCode(busLedgerPipe.getPosition())); @@ -139,7 +137,11 @@ page.setCurrent(1); page.setSize(Integer.MAX_VALUE); Page devicePage = iBusLedgerPipeService.listPage(page, busLedgerPipeRequestDTO); + List records = devicePage.getRecords(); try { + for (BusLedgerPipe busLedgerPipe : records) { + busLedgerPipe.setLocationCategory(abstractDictService.getDictNameByCode("locationType", busLedgerPipe.getLocationCategory())); + } iBaseExportService.exportExcel(response, BusLedgerPipe.class, devicePage.getRecords(), ExportEnum.LEDGER_PIPE_EXPORT.getSheetName()); } catch (Exception e) { e.printStackTrace(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java index e87f3f8..8040c74 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java @@ -7,10 +7,13 @@ 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.DeletesDTO; import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.ProtocolDict; import com.casic.missiles.modular.device.dto.BusProtocolDTO; import com.casic.missiles.modular.device.entity.BusProtocol; import com.casic.missiles.modular.device.service.IBusProtocolService; @@ -35,10 +38,10 @@ @RestController @RequestMapping("/system/busProtocol") public class BusProtocolController extends ExportController { - + private final IBusProtocolService protocolService; - + @ApiOperation("查询分页接口") @PostMapping("/listPage") @ResponseBody @@ -47,9 +50,10 @@ queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getProtocolName()), "PROTOCOL_NAME", requestDTO.getProtocolName()); queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getProtocolCode()), "PROTOCOL_CODE", requestDTO.getProtocolCode()); Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(protocolService.page(page,queryWrapper))); + return ReturnUtil.success(super.packForBT(protocolService.page(page, queryWrapper))); } + @OperateLog(value = "新增协议", key = "protocolName,protocolCode,version,ip,description", dict = ProtocolDict.class, type = "add") @ApiOperation("新增") @PostMapping("/add") @ResponseBody @@ -58,6 +62,7 @@ return ReturnUtil.success(protocolService.save(busProtocol)); } + @OperateLog(value = "编辑协议", dict = ProtocolDict.class, serviceClass = IBusProtocolService.class, type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -68,10 +73,11 @@ return ReturnUtil.success(protocolService.updateById(busProtocol)); } + @OperateLog(value = "删除协议", key = "protocolName", dict = ProtocolDict.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 23ddee9..24c4712 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 @@ -2,7 +2,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.entity.BusDevice; import com.casic.missiles.util.InConditionDriver; @@ -46,27 +45,27 @@ @Param("orderColumn") String orderColumn, @Param("request") CommonRequestDTO request); - @Select("SELECT BFZT from bus_device where VALID=1 and DEVCODE= #{devcode} limit 1" ) - String getBfcf( @Param("devcode") String devcode); + @Select("SELECT BFZT from bus_device where VALID=1 and DEVCODE= #{devcode} limit 1") + String getBfcf(@Param("devcode") String devcode); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getMethaneData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getMethaneData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_tube_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getTubeOtherData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_tube_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getTubeOtherData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gasliquid_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getLGData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gasliquid_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getLGData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_monitor_pipe_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getMonitorPipeOtherData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_monitor_pipe_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getMonitorPipeOtherData(@Param("devcodes") List devcodes); - @Select("SELECT ALARM_THRESHOLD FROM `alarm_rule_device` where DEVCODE = #{devcode} order by ALARM_THRESHOLD asc " ) + @Select("SELECT ALARM_THRESHOLD FROM `alarm_rule_device` where DEVCODE = #{devcode} order by ALARM_THRESHOLD asc ") List getSpecialDeviceRule(@Param("devcode") String devcode); @Select(" select ar.ALARM_THRESHOLD from alarm_rule ar where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + @@ -81,4 +80,7 @@ "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") List getListByWellId(@Param("wellId") Long wellId); + + BusDeviceOperateLogDTO getByDeviceId(@Param("id") Long id); + } 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 8ba4b15..3109344 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 @@ -44,7 +44,7 @@ LEFT JOIN base_product bp ON bd.PRODUCT_ID = bp.ID LEFT JOIN bus_device_ledger br on br.DEVICE_ID = bd.ID AND br.VALID='1' LEFT JOIN bus_manufacturer bm on bm.ID = bp.MANUFACTURER_ID - LEFT JOIN bus_ledger_all_view bl on bl.ID = br.LEDGER_ID AND br.VALID='1' and bl.type = br.type + LEFT JOIN bus_ledger_all_view bl on bl.ID = br.LEDGER_ID AND bl.VALID='1' and bl.type = br.type where bd.valid>0 @@ -95,6 +95,32 @@ + + + SELECT - rd.*, - at.alarm_type, - bt.TYPE_NAME as devTypeName - FROM - alarm_records rd - LEFT JOIN bus_ledger_all_view lr ON lr.ledgerCode = rd.LEDGER_CODE - LEFT JOIN alarm_type at ON at.ID = rd.ALARM_TYPE_ID - LEFT JOIN bus_device bd ON bd.DEVCODE = rd.DEVCODE and bd.valid >0 - LEFT JOIN base_device_type bt ON bt.id = bd.DEVICE_TYPE + rd.*, + AT.alarm_type, + bt.TYPE_NAME AS devTypeName + FROM + alarm_records rd + LEFT JOIN bus_device bd ON bd.DEVCODE = rd.DEVCODE + AND bd.valid > 0 + LEFT JOIN bus_device_ledger bl ON bd.ID = bl.DEVICE_ID + AND bl.VALID = '1' + 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' + AND lr.ledgerCode = rd.LEDGER_CODE + LEFT JOIN alarm_type AT ON AT.ID = rd.ALARM_TYPE_ID + LEFT JOIN base_device_type bt ON bt.id = bd.DEVICE_TYPE where rd.STATUS ='1' and rd.EXCEPTION_TYPE='0' @@ -695,6 +705,7 @@ dt.LOGTIME, bv.tagNumber, bv.ledgerCode, + bv.ledgerName, bdt.TYPE_NAME, bv.place, bv.type, @@ -720,6 +731,7 @@ t.tagNumber, t.ledgerCode, t.TYPE_NAME, + t.ledgerName, t.OFF_DAYS, t.LOGTIME, t.place, diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml index 7aff0f0..a63dac1 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml @@ -25,34 +25,55 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java index 3e0edd6..9dab3a7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java @@ -71,4 +71,18 @@ private Long deptid; + @ApiModelProperty("经度") + private String lngGaode; + + @ApiModelProperty("纬度") + private String latGaode; + + @ApiModelProperty("监测类型") + private String watchObject; + + @ApiModelProperty("点位id") + private Long ledgerId; + + + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java index e938da8..60464c4 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java @@ -12,6 +12,7 @@ private String deviceType; private String tagNumber; private String ledgerCode; + private String ledgerName; private String place; //台账类型 private String type; 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 ac4cabe..e623df7 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 @@ -44,6 +44,7 @@ import static cn.hutool.core.date.DateUnit.DAY; import static com.casic.missiles.util.TimeConvertUtil.TimeConverter; +import static com.casic.missiles.util.TimeConvertUtil.TimeConverterSecond; /** *

@@ -180,8 +181,8 @@ public DeviceAlarmDetailDTO deviceAlarmDetail(Long id) { DeviceAlarmDetailDTO alarmDetail = this.baseMapper.deviceAlarmDetail(id); - alarmDetail.setCancelDuration(TimeConverter(alarmDetail.getCancelDuration())); - alarmDetail.setProcessDuration(TimeConverter(alarmDetail.getProcessDuration())); + alarmDetail.setCancelDuration(TimeConverterSecond(alarmDetail.getCancelDuration())); + alarmDetail.setProcessDuration(TimeConverterSecond(alarmDetail.getProcessDuration())); alarmDetail.setDeptName(ObjectUtil.isNotEmpty(alarmDetail.getDeptid()) ? commonServer.getDeptNamesByDeptId(alarmDetail.getDeptid()) : ""); // alarmDetail.setAddress(alarmDetail.getTagNumber().concat("|").concat(alarmDetail.getLedgerName())); alarmDetail.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmDetail.getAlarmCategory())); @@ -524,16 +525,26 @@ @Override public void cancelDeviceAlarm(String devCode) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("DEVCODE", devCode); - updateWrapper.eq("EXCEPTION_TYPE", "1"); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE", devCode); + queryWrapper.eq("EXCEPTION_TYPE", "1"); //只有挂起和已处置的才消 // updateWrapper.ge("PROCESS_STATUS", "3"); - updateWrapper.eq("STATUS", "1"); - updateWrapper.set("STATUS", "0"); - updateWrapper.set("CANCEL_TIME", new Date()); - this.update(updateWrapper); - //toDo:需要加流程取消日志 + queryWrapper.eq("STATUS", "1"); + List alarmRecordsList = this.list(queryWrapper); + if (alarmRecordsList != null && alarmRecordsList.size() > 0) { + alarmRecordsList.forEach(alarmRecords -> { + alarmRecords.setStatus("0"); + alarmRecords.setCancelTime(new Date()); + alarmRecords.setPreProcessStatus(alarmRecords.getProcessStatus()); + alarmRecords.setProcessStatus(ApprovalStatusEnum.FINISHED.getCode()); + this.updateById(alarmRecords); + }); + //添加流程日志 + approvalLogMapper.insert(new ApprovalLog(alarmRecordsList.get(0).getId(), "1", + "", ApprovalStatusEnum.FINISHED.getCode(), + null)); + } } @Override @@ -674,8 +685,12 @@ AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), data.concat("%LEL"), data, - alarmRuleResponseDTO.getAlarmLevelId(),DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmLevelId(), DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmRuleResponseDTO.getAlarmTypeName(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -721,7 +736,7 @@ @Override - public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime,List busWellDTOList, + public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime, List busWellDTOList, Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { @@ -730,8 +745,12 @@ try { AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, - alarmLevelId, DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmLevelId, DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmTypeName, + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace() + , "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -793,7 +812,11 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.get().getAlarmTypeId(), alarmRuleResponseDTO.get().getAlarmTypeName(), alarmRuleResponseDTO.get().getAlarmLevelId(), DateUtil.parse(logTime), - alarmRuleResponseDTO.get().getAlarmThreshold(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "1"); + alarmRuleResponseDTO.get().getAlarmThreshold(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "1"); this.save(alarmRecords); } catch (Exception e) { e.printStackTrace(); @@ -846,8 +869,8 @@ * @param cell */ @Override - public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent,String logTime) { - this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent,DateUtil.parse(logTime)); + public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent, String logTime) { + this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent, DateUtil.parse(logTime)); } @Override @@ -903,7 +926,10 @@ offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), - offDeviceDTO.getPlace(), "1"); + ObjectUtil.isNotEmpty(offDeviceDTO.getLedgerName()) ? + offDeviceDTO.getTagNumber().concat("|"). + concat(offDeviceDTO.getLedgerName()) : + offDeviceDTO.getPlace(), "1"); alarmRecordsList.add(alarmRecords); ledgers.add(offDeviceDTO); } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java new file mode 100644 index 0000000..cb554b9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.data.dto; + + +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class PanDataDTO implements Serializable { + + private static final long serialVersionUID = 1232822221212L; + + private String dataTime; + + private String attributeType; + + private String dataValue; + + private String deviceCode; + + + +} 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 index a082d00..2a943ad 100644 --- 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 @@ -23,6 +23,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -37,6 +38,7 @@ * @author zt * @since 2025-01-22 */ +@Slf4j @RequiredArgsConstructor @Service public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { @@ -71,8 +73,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -80,8 +81,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}",devCode, e); } } @@ -141,8 +141,7 @@ } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -222,8 +221,10 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); +// e.printStackTrace(); +// log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); + } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java index dd80611..cd24860 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java @@ -83,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -124,8 +123,7 @@ busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -200,8 +198,7 @@ alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } //低电量报警处理 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 302b446..f0def39 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 @@ -76,8 +76,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -85,8 +84,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -133,8 +131,7 @@ if (i < jsonArray.size() - 1) continue; busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -217,8 +214,7 @@ } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } 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 e5ba8f7..a02af88 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataMonitorPipeOtherServiceImpl extends ServiceImpl implements IDataMonitorPipeOtherService, IDataAbstractService { @@ -73,8 +75,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -116,8 +116,7 @@ //2.写入新的报警 alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + log.error("处理报警时发生异常,devcode:{},e:{}", devCode, e); } } } @@ -160,8 +159,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmEventCode)); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -341,8 +339,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag || ObjectUtil.isNotEmpty(alarmContent) ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java index 5dc8c2b..f383690 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java @@ -2,7 +2,6 @@ import cn.hutool.core.date.DateUtil; 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; @@ -13,15 +12,20 @@ import com.casic.missiles.modular.alarm.service.IAlarmRuleService; import com.casic.missiles.modular.data.dao.DataGasMapper; import com.casic.missiles.modular.data.dao.DataPanGasMapper; +import com.casic.missiles.modular.data.dto.PanDataDTO; import com.casic.missiles.modular.data.entity.DataPanGas; import com.casic.missiles.modular.data.service.IDataPanGasService; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.CommonUtil; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonToken; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.io.IOException; import java.util.Date; import java.util.List; import java.util.Map; @@ -68,78 +72,179 @@ } - @Transactional @Override public boolean processAcceptGasData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); - JSONArray jsonArray = jsonObject.getJSONArray("data"); - String devCode = ""; - for (int i = 0; i < jsonArray.size(); i++) { - try { - devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); - if (ObjectUtil.isEmpty(devCode)) continue; - List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); - String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); - String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); - //暂只存浓度 - if ("2".equals(attributeType)) continue; - String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); - gas = String.format("%.2f", Double.valueOf(gas)); - //1.存数据 - save(DataPanGas.builder() - .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") - .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") - .deviceCode(devCode) - .concentration(gas) - .logtime(DateUtil.parseDateTime(dataTime)) - .build());//存储采集数据 - //2.有无超限处理流程(判断最后一条数据) -// if (i < jsonArray.size() - 1) continue; - - //3.清除设备告警 - alarmRecordsService.cancelDeviceAlarm(devCode); - //4.存报警 - //若没绑场站,则不产生报警 - boolean alarmFlag = false; - String bfcf = busDeviceService.getBfcf(devCode); - 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))) { - dataTime = dataTime.replaceAll("-", ""); - dataTime = dataTime.replaceAll(":", ""); - dataTime = dataTime.replaceAll("\\s+", ""); - alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); - } - break; - } - } - } - //5.清数据报警 - if (!alarmFlag) { - alarmRecordsService.cancelDataAlarm(devCode); - } - //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); - //7.更新监测井状态 (1:正常,2:报警) - if (busWellDTOList != null && busWellDTOList.size() > 0) { - alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); - } - } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + JsonFactory factory = new JsonFactory(); + try (JsonParser parser = factory.createParser(jsonObject.getString("data"))) { + // 定位到 "data" 数组 + while (parser.nextToken() != JsonToken.START_ARRAY) { + parser.nextToken(); } + // 逐条处理数据 + while (parser.nextToken() != JsonToken.END_ARRAY) { + if (parser.getCurrentToken() == JsonToken.START_OBJECT) { + processSingleData(parseJsonObject(parser)); + } + + } + } catch (IOException e) { + e.printStackTrace(); } + return true; } + private PanDataDTO parseJsonObject(JsonParser parser) throws IOException { + PanDataDTO panDataDTO = new PanDataDTO(); + while (parser.nextToken() != JsonToken.END_OBJECT) { + String fieldName = parser.getCurrentName(); + if ("dataTime".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataTime(parser.getText()); + } else if ("attributeType".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setAttributeType(parser.getText()); + } else if ("dataValue".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataValue(parser.getText()); + } else if ("deviceCode".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDeviceCode(parser.getText()); + } + } + return panDataDTO; + } + + + private void processSingleData(PanDataDTO panDataDTO) { + try { + String devCode = panDataDTO.getDeviceCode(); + if (ObjectUtil.isEmpty(devCode)) return; + List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); + String gas = panDataDTO.getDataValue(); + String attributeType = panDataDTO.getAttributeType(); + //暂只存浓度 + if ("2".equals(attributeType)) return; + String dataTime = panDataDTO.getDataTime(); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataPanGas.builder() + .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .deviceCode(devCode) + .concentration(gas) + .logtime(DateUtil.parseDateTime(dataTime)) + .build());//存储采集数据 + + boolean alarmFlag = false; + String bfcf = busDeviceService.getBfcf(devCode); + 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))) { +// dataTime = dataTime.replaceAll("-", ""); +// dataTime = dataTime.replaceAll(":", ""); +// dataTime = dataTime.replaceAll("\\s+", ""); + alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); + //7.更新监测井状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + log.error("处理云台数据时发生异常,devcode:{},data:{},e:{}", panDataDTO.getDeviceCode(), panDataDTO.toString(), e); + } + } + + +// @Transactional +// @Override +// public boolean processAcceptGasData(Map dataParams) { +// JSONObject jsonObject = new JSONObject(dataParams); +// JSONArray jsonArray = jsonObject.getJSONArray("data"); +// String devCode = ""; +// for (int i = 0; i < jsonArray.size(); i++) { +// try { +// devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); +// if (ObjectUtil.isEmpty(devCode)) continue; +// List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); +// String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); +// String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); +// //暂只存浓度 +// if ("2".equals(attributeType)) continue; +// String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); +// gas = String.format("%.2f", Double.valueOf(gas)); +// //1.存数据 +// save(DataPanGas.builder() +// .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") +// .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") +// .deviceCode(devCode) +// .concentration(gas) +// .logtime(DateUtil.parseDateTime(dataTime)) +// .build());//存储采集数据 +// //2.有无超限处理流程(判断最后一条数据) +//// if (i < jsonArray.size() - 1) continue; +// +// //3.清除设备告警 +//// alarmRecordsService.cancelDeviceAlarm(devCode); +// //4.存报警 +// //若没绑场站,则不产生报警 +// boolean alarmFlag = false; +// String bfcf = busDeviceService.getBfcf(devCode); +// 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))) { +//// dataTime = dataTime.replaceAll("-", ""); +//// dataTime = dataTime.replaceAll(":", ""); +//// dataTime = dataTime.replaceAll("\\s+", ""); +// alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); +// } +// break; +// } +// } +// } +// //5.清数据报警 +// if (!alarmFlag) { +// alarmRecordsService.cancelDataAlarm(devCode); +// } +// //6.更新电量及状态 (1:正常,2:报警) +// alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); +// //7.更新监测井状态 (1:正常,2:报警) +// if (busWellDTOList != null && busWellDTOList.size() > 0) { +// alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); +// } +// } catch (Exception e) { +// log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); +// } +// } +// return true; +// } + @Override public boolean acceptAlarmData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); 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 37d731d..a17953b 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataTubeOtherServiceImpl extends ServiceImpl implements IDataTubeOtherService, IDataAbstractService { @@ -73,7 +75,7 @@ } } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,7 +84,7 @@ imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -122,8 +124,8 @@ } //特殊处理消警 if ("CancelWaterImmersionAlarm".equals(alarmType)) { - if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { - alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + if (alarmRecordsService.isWatchAlarms(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelWatchAlarms(devCode, "WaterImmersionAlarm"); } continue; } @@ -146,8 +148,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmType)); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -227,8 +228,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java new file mode 100644 index 0000000..3be65dd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java @@ -0,0 +1,170 @@ +package com.casic.missiles.modular.aop; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.aop.annotion.ReflectionUtils; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.modular.interfaces.log.LogManager; +import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.Serializable; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Aspect +@Component +public class OperateLogAspect { + private Logger log = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private ApplicationContext applicationContext; + + public static volatile Map oldMap = new HashMap<>(); + + public OperateLogAspect() { + } + + @Pointcut("@annotation(com.casic.missiles.modular.aop.annotion.OperateLog)") + public void cutService() { + } + + @Around("cutService()") + public Object recordSysLog(ProceedingJoinPoint point) throws Throwable { + Object result = point.proceed(); + + try { + this.handle(point); + } catch (Exception var4) { + this.log.error("日志记录出错!", var4); + } + + return result; + } + + /** + * 处理请求前执行 + */ + @Before(value = "@annotation(operateLog)") + public void boBefore(JoinPoint joinPoint, OperateLog operateLog) { + Object info = joinPoint.getArgs()[0]; + if ("edit".equals(operateLog.type()) && operateLog.needDefaultCompare()) { + Class cls = operateLog.serviceClass(); + IService service = (IService) applicationContext.getBean(cls); + Object result; + if (service instanceof IBusDeviceService) { + result = ((IBusDeviceService) service).getByDeviceId((Long) ReflectionUtils.getFieldValue(info, "id")); + } else + result = service.getById((Serializable) ReflectionUtils.getFieldValue(info, "id")); + oldMap = (Map) objectToMap(result); // 存储修改前的对象 + } + } + + private void handle(ProceedingJoinPoint point) throws Exception { + Signature sig = point.getSignature(); + MethodSignature msig = null; + if (!(sig instanceof MethodSignature)) { + throw new IllegalArgumentException("该注解只能用于方法"); + } else { + msig = (MethodSignature) sig; + Object target = point.getTarget(); + Method currentMethod = target.getClass().getMethod(msig.getName(), msig.getParameterTypes()); + String methodName = currentMethod.getName(); + AuthUser user = ShiroKit.getUser(); + if (null != user) { + String className = point.getTarget().getClass().getName(); + Object[] params = point.getArgs(); + OperateLog annotation = (OperateLog) currentMethod.getAnnotation(OperateLog.class); + String bussinessName = annotation.value(); + String key = annotation.key(); + Class dictClass = annotation.dict(); + String sb = argsArrayToString(params); + String msg = sb; + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + if ("add".equals(annotation.type())) { + Map parameters = (Map) objectToMap(params[0]); + msg = CollectionUtils.isEmpty(parameters) ? sb : ReflectionUtils.parseMutiKey(dictMap, key, parameters); + } else if ("edit".equals(annotation.type())) { + msg = CollectionUtils.isEmpty(oldMap) ? sb : ReflectionUtils.contrastObj(dictClass, key, params[0], oldMap); + }else if("delete".equals(annotation.type())){ + msg=dictMap.get(annotation.key())+":"+ReflectionUtils.getDeleteKeys(params[0]); + } + LogManager.me().executeLog(LogTaskFactory.bussinessLog(user.getId(), bussinessName, className, methodName, msg)); + } + } + } + + + /** + * 参数拼装 + */ + private String argsArrayToString(Object[] paramsArray) { + Gson gson = new GsonBuilder().create(); + String params = ""; + if (paramsArray != null && paramsArray.length > 0) { + for (int i = 0; i < paramsArray.length; i++) { + if (!isFilterObject(paramsArray[i])) { + params += gson.toJson(paramsArray[i]) + " & "; + } + } + } + return params.trim(); + } + + + /** + * 判断是否需要过滤的对象。 + * + * @param o 对象信息。 + * @return 如果是需要过滤的对象,则返回true;否则返回false。 + */ + public boolean isFilterObject(final Object o) { + return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse; + } + + private Map objectToMap(Object obj) { + if (obj == null) { + return null; + } + ObjectMapper mapper = new ObjectMapper(); + mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + // 如果使用JPA请自己打开这条配置 + // mapper.addMixIn(Object.class, IgnoreHibernatePropertiesInJackson.class); + Map mappedObject = mapper.convertValue(obj, Map.class); + return mappedObject; + + + } +} + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java new file mode 100644 index 0000000..77afa9c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.aop.annotion; + +import java.lang.annotation.*; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.FIELD}) +@Documented +public @interface DataName { + String name() default ""; // 字段名称 + + /** + * 读取枚举内容转义表达式 (如: 0=男,1=女,2=未知) + */ + String readConverterExp() default ""; +} + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java new file mode 100644 index 0000000..f1f59ad --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.aop.annotion; + + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.common.constant.dictmap.base.SystemDict; + +import java.lang.annotation.*; + +@Inherited +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.METHOD}) +public @interface OperateLog { + String value() default ""; + + String key() default "id"; + + Class serviceClass() default IService.class; + + // 是否需要比较新旧数据 + boolean needDefaultCompare() default true; + + //操作类型 add update delete + String type() default "update"; + + Class dict() default SystemDict.class; +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java new file mode 100644 index 0000000..eb773ad --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java @@ -0,0 +1,328 @@ +package com.casic.missiles.modular.aop.annotion; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.modular.interfaces.dictmap.factory.DictFieldWrapperFactory; +import lombok.extern.slf4j.Slf4j; + +import java.beans.PropertyDescriptor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.*; + +import static com.casic.missiles.modular.interfaces.utils.Contrast.firstCharToLowerCase; +import static com.casic.missiles.modular.interfaces.utils.Contrast.firstCharToUpperCase; + +@Slf4j +public class ReflectionUtils { + + /** + * 直接读取对象属性值, 无视private/protected修饰符, 不经过getter函数. + * + * @param obj 读取的对象 + * @param fieldName 读取的列 + * @return 属性值 + */ + public static Object getFieldValue(final Object obj, final String fieldName) { + Field field = getAccessibleField(obj, fieldName); + if (field == null) { + throw new IllegalArgumentException("Could not find field [" + fieldName + "] on target [" + obj + "]"); + } + + Object result = null; + try { + result = field.get(obj); + } catch (IllegalAccessException e) { + log.error("不可能抛出的异常{}", e.getMessage()); + e.printStackTrace(); + } + return result; + } + + /** + * 循环向上转型, 获取对象的DeclaredField, 并强制设置为可访问.如向上转型到Object仍无法找到, 返回null. + * + * @param obj 查找的对象 + * @param fieldName 列名 + * @return 列 + */ + public static Field getAccessibleField(final Object obj, final String fieldName) { + for (Class superClass = obj.getClass(); superClass != Object.class; superClass = superClass.getSuperclass()) { + try { + Field field = superClass.getDeclaredField(fieldName); + makeAccessible(field); + return field; + } catch (NoSuchFieldException e) { // NOSONAR + // Field不在当前类定义,继续向上转型 + e.printStackTrace(); + continue; // new add + } + } + return null; + } + + /** + * 改变private/protected的成员变量为public,尽量不调用实际改动的语句,避免JDK的SecurityManager抱怨。 + * + * @param + */ + public static void makeAccessible(Field field) { + if ((!Modifier.isPublic(field.getModifiers()) || !Modifier.isPublic(field.getDeclaringClass().getModifiers()) || Modifier + .isFinal(field.getModifiers())) && !field.isAccessible()) { + field.setAccessible(true); + } + } + + /** + * 获取两个对象同名属性内容不相同的列表 + * + * @param class1 old对象 + * @param class2 new对象 + * @return 区别列表 + * @throws ClassNotFoundException 异常 + * @throws IllegalAccessException 异常 + */ + public static List> compareTwoClass(Object class1, Object class2) throws ClassNotFoundException, IllegalAccessException { + List> list = new ArrayList>(); + // 获取对象的class + Class clazz1 = class1.getClass(); + Class clazz2 = class2.getClass(); + // 获取对象的属性列表 + Field[] field1 = clazz1.getDeclaredFields(); + Field[] field2 = clazz2.getDeclaredFields(); + StringBuilder sb = new StringBuilder(); + // 遍历属性列表field1 + for (int i = 0; i < field1.length; i++) { + // 遍历属性列表field2 + for (int j = 0; j < field2.length; j++) { + // 如果field1[i]属性名与field2[j]属性名内容相同 + if (field1[i].getName().equals(field2[j].getName())) { + if (field1[i].getName().equals(field2[j].getName())) { + field1[i].setAccessible(true); + field2[j].setAccessible(true); + // 如果field1[i]属性值与field2[j]属性值内容不相同 + if (!compareTwo(field1[i].get(class1), field2[j].get(class2))) { + Map map2 = new HashMap(); + DataName name = field1[i].getAnnotation(DataName.class); + String fieldName = ""; + if (name != null) { + fieldName = name.name(); + } else { + fieldName = field1[i].getName(); + } + map2.put("name", fieldName); + map2.put("old", field1[i].get(class1)); + map2.put("new", field2[j].get(class2)); + list.add(map2); + } + break; + } + } + } + } + return list; + } + + /** + * 对比两个数据是否内容相同 + * + * @param object1 比较对象1 + * @param object2 比较对象2 + * @return boolean类型 + */ + public static boolean compareTwo(Object object1, Object object2) { + if (object1 == null && object2 == null) { + return true; + } + if (object1 == null && object2 != null) { + return false; + } + if (object1.equals(object2)) { + return true; + } + return false; + } + + public static String contrastObjByName(Class dictClass, String key, Object pojo1, Map pojo2) throws IllegalAccessException, InstantiationException { + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + String str = parseMutiKey(dictMap, key, pojo2) + ";;;"; + + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if (!"serialVersionUID".equals(field.getName())) { + String prefix = "get"; + int prefixLength = 3; + if (field.getType().getName().equals("java.lang.Boolean")) { + prefix = "is"; + prefixLength = 2; + } + + Method getMethod = null; + + try { + getMethod = clazz.getDeclaredMethod(prefix + firstCharToUpperCase(field.getName())); + } catch (NoSuchMethodException var22) { + System.err.println("this className:" + clazz.getName() + " is not methodName: " + var22.getMessage()); + continue; + } + + Object o1 = getMethod.invoke(pojo1); + Object o2 = pojo2.get(firstCharToLowerCase(getMethod.getName().substring(prefixLength))); + if (o1 != null && o2 != null) { + if (o1 instanceof Date) { + o1 = DateUtil.format(new Date(), "yyyy-MM-dd"); + } else if (o1 instanceof Integer) { + o2 = Integer.parseInt(o2.toString()); + } + + if (!o1.toString().equals(o2.toString())) { + if (i != 1) { + str = str + ";;;"; + } + + String fieldName = dictMap.get(field.getName()); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(field.getName()); + if (fieldWarpperMethodName != null) { + Object o1Warpper = DictFieldWrapperFactory.createFieldWrapper(o1, fieldWarpperMethodName); + Object o2Warpper = DictFieldWrapperFactory.createFieldWrapper(o2, fieldWarpperMethodName); + str = str + "字段名称:" + fieldName + ",旧值:" + o1Warpper + ",新值:" + o2Warpper; + } else { + str = str + "字段名称:" + fieldName + ",旧值:" + o1 + ",新值:" + o2; + } + + ++i; + } + } + } + } + } catch (Exception var23) { + var23.printStackTrace(); + } + + return str; + } + + public static String parseMutiKey(AbstractDictMap dictMap, String key, Map requests) { + StringBuilder sb = new StringBuilder(); + if (key.indexOf(",") != -1) { + String[] keys = key.split(","); + String[] var13 = keys; + int var14 = keys.length; + + for (int var7 = 0; var7 < var14; ++var7) { + String item = var13[var7].trim(); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(item); + Object value = requests.get(item); + if (fieldWarpperMethodName != null) { + Object valueWarpper = DictFieldWrapperFactory.createFieldWrapper(value, fieldWarpperMethodName); + sb.append(dictMap.get(item) + "=" + valueWarpper + ","); + } else { + sb.append(dictMap.get(item) + "=" + (ObjectUtil.isNotEmpty(value) ? value.toString() : "") + ","); + } + } + + return StrUtil.removeSuffix(sb.toString(), ","); + } else { + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(key); + Object value = requests.get(key); + if (fieldWarpperMethodName != null) { + Object valueWarpper = DictFieldWrapperFactory.createFieldWrapper(value, fieldWarpperMethodName); + sb.append(dictMap.get(key) + "=" + valueWarpper); + } else { + sb.append(dictMap.get(key) + "=" + (ObjectUtil.isNotEmpty(value) ? value.toString() : "")); + } + + return sb.toString(); + } + } + + public static String getDeleteKeys(Object pojo1) { + String str = ""; + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if ("keys".equals(field.getName())) { + PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); + Method getMethod = pd.getReadMethod(); + Object o1 = getMethod.invoke(pojo1); + return ObjectUtil.isNotEmpty(o1) ? o1.toString().replaceAll("\\[|]", "") : "".concat(",已删除"); + } + } + + } catch (Exception var21) { + var21.printStackTrace(); + } + return str; + } + + public static String contrastObj(Class dictClass, String key, Object pojo1, Map pojo2) throws IllegalAccessException, InstantiationException { + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); +// String str = parseMutiKey(dictMap, key, pojo2) + ";;;"; + String str = ""; + + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if (!"serialVersionUID".equals(field.getName())) { + PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); + Method getMethod = pd.getReadMethod(); + Object o1 = getMethod.invoke(pojo1); + Object o2 = pojo2.get(firstCharToLowerCase(getMethod.getName().substring(3))); + if (o1 != null && o2 != null) { + if (o1 instanceof Integer) { + o2 = Integer.parseInt(o2.toString()); + } else if (o1 instanceof Date) { + o1 = DateUtil.format((Date) o1, "yyyy-MM-dd HH:mm:ss"); + } + + if (!o1.toString().equals(o2.toString())) { + if (i != 1) { + str = str + ";"; + } + + String fieldName = dictMap.get(field.getName()); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(field.getName()); + if (fieldWarpperMethodName != null) { + Object o1Warpper = DictFieldWrapperFactory.createFieldWrapper(o1, fieldWarpperMethodName); + Object o2Warpper = DictFieldWrapperFactory.createFieldWrapper(o2, fieldWarpperMethodName); + str = str + fieldName + ":将【" + o1Warpper + "】,改为【" + o2Warpper + "】"; + } else { + str = str + fieldName + ":将【" + o1 + "】,改为【" + o2 + "】"; + } + + ++i; + } + } + } + } + } catch (Exception var21) { + var21.printStackTrace(); + } + + return str; + } + + +} \ No newline at end of file diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java index 7497ebf..18fd820 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java @@ -8,12 +8,14 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.StateDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.DeviceTypeDict; import com.casic.missiles.modular.device.dto.BaseDeviceTypeDTO; import com.casic.missiles.modular.device.dto.BaseDeviceTypeIdsDTO; import com.casic.missiles.modular.device.dto.SelectDTO; @@ -63,6 +65,7 @@ return ReturnUtil.success(super.packForBT(baseDeviceTypePage)); } + @OperateLog(value = "新增设备类型", key = "typeName,watchObject,isUsed,typeDescription", dict = DeviceTypeDict.class, type = "add") @ApiOperation("增加设备类型") @PostMapping("/add") @ResponseBody @@ -71,6 +74,7 @@ return ReturnUtil.success(iBaseDeviceTypeService.saveBaseDeviceType(baseDeviceType)); } + @OperateLog(value = "编辑设备类型", dict = DeviceTypeDict.class, serviceClass = IBaseDeviceTypeService.class, type = "edit") @ApiOperation("编辑设备类型") @PostMapping("/edit") @ResponseBody @@ -81,10 +85,11 @@ return ReturnUtil.success(iBaseDeviceTypeService.updateById(baseDeviceType)); } + @OperateLog(value = "删除设备类型", key = "typeName", dict = DeviceTypeDict.class, serviceClass = IBaseDeviceTypeService.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); @@ -113,7 +118,7 @@ public ReturnDTO selectList(@RequestBody BaseDeviceTypeIdsDTO request) { QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.in(request.getDeviceTypeList()!=null&&request.getDeviceTypeList().size()>0, "id", request.getDeviceTypeList()); + queryWrapper.in(request.getDeviceTypeList() != null && request.getDeviceTypeList().size() > 0, "id", request.getDeviceTypeList()); queryWrapper.eq("IS_USED", "1"); List baseDeviceTypes = iBaseDeviceTypeService.list(queryWrapper); List selectDTOS = new ArrayList<>(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java index 42d752d..54944e2 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java @@ -3,14 +3,15 @@ import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.IdDTO; -import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.ProductDict; import com.casic.missiles.modular.device.dto.BaseProductDTO; import com.casic.missiles.modular.device.dto.SelectProductDTO; import com.casic.missiles.modular.device.entity.BaseProduct; @@ -21,7 +22,6 @@ import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; -import java.util.List; import java.util.Objects; /** @@ -49,6 +49,7 @@ return ReturnUtil.success(super.packForBT(iBaseProductService.pageList(page, requestDTO))); } + @OperateLog(value = "新增产品", key = "productName,deviceType,deviceModel,manufacturerId,protocol,accessMethod,powerSupplyMode,dataService", dict = ProductDict.class, type = "add") @ApiOperation("新增") @PostMapping("/add") @ResponseBody @@ -58,6 +59,7 @@ } + @OperateLog(value = "编辑产品", dict = ProductDict.class, serviceClass = IBaseProductService.class, type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -68,10 +70,11 @@ return ReturnUtil.success(iBaseProductService.updateBaseProductById(baseProduct)); } + @OperateLog(value = "删除产品", key = "productName", dict = ProductDict.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 509bd7b..103acf2 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 @@ -9,6 +9,7 @@ import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; @@ -17,6 +18,7 @@ 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.aop.annotion.OperateLog; import com.casic.missiles.modular.device.dict.BusConfigDict; import com.casic.missiles.modular.device.dict.DeviceDict; import com.casic.missiles.modular.device.dto.*; @@ -65,7 +67,8 @@ } - @BussinessLog(value = "新增设备", key = "devcode,deviceName,deviceType,installDate,productId", dict = DeviceDict.class) + @OperateLog(value = "新增设备", key = "devcode,deviceType,productId," + + "valid,communicationType,simId,warrantyPeriod,tagNumber,leftLength,rightLength,", dict = DeviceDict.class,type = "add") @CacheEvict(value="busLedgersCache", key="#busDevice.getDevcode()") @ApiOperation("新增") @PostMapping("/add") @@ -75,7 +78,8 @@ } - @BussinessLog(value = "编辑设备", key = "devcode,deviceName,deviceType,installDate,productId", dict = DeviceDict.class) + @OperateLog(value = "编辑设备", key = "devcode,deviceType,installDate,productId," + + "leftLength,rightLength,communicationType,simId,warrantyPeriod", dict = DeviceDict.class,serviceClass = IBusDeviceService.class,type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -86,11 +90,12 @@ return ReturnUtil.success(iBusDeviceService.updateBusDevice(busDevice)); } + @OperateLog(value = "删除设备", key = "devcode", dict = DeviceDict.class,serviceClass = IBusDeviceService.class,type = "delete") @CacheEvict(value="busLedgersCache", allEntries = true) @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 31de56e..6f35acd 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 @@ -4,8 +4,8 @@ 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.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.page.PageFactory; @@ -16,11 +16,8 @@ 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.BusDeviceDTO; -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.BusDevice; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.CommonUtil; @@ -53,6 +50,7 @@ private final IBusLedgerPipeService iBusLedgerPipeService; private final IBaseExportService iBaseExportService; + private final AbstractDictService abstractDictService; @ApiOperation("新建点位") @PostMapping("/addPosition") @@ -60,10 +58,10 @@ 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,"安装位号已存!!!"); + if (busLedgerPipeList != null && busLedgerPipeList.size() > 0) { + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE, "安装位号已存!!!"); } - Long id =IdUtil.getSnowflake(1,2).nextId(); + Long id = IdUtil.getSnowflake(1, 2).nextId(); busLedgerPipe.setId(id); busLedgerPipe.setLedgerCode(busLedgerPipe.getTagNumber()); busLedgerPipe.setArea(CommonUtil.getAreaCode(busLedgerPipe.getPosition())); @@ -139,7 +137,11 @@ page.setCurrent(1); page.setSize(Integer.MAX_VALUE); Page devicePage = iBusLedgerPipeService.listPage(page, busLedgerPipeRequestDTO); + List records = devicePage.getRecords(); try { + for (BusLedgerPipe busLedgerPipe : records) { + busLedgerPipe.setLocationCategory(abstractDictService.getDictNameByCode("locationType", busLedgerPipe.getLocationCategory())); + } iBaseExportService.exportExcel(response, BusLedgerPipe.class, devicePage.getRecords(), ExportEnum.LEDGER_PIPE_EXPORT.getSheetName()); } catch (Exception e) { e.printStackTrace(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java index e87f3f8..8040c74 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java @@ -7,10 +7,13 @@ 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.DeletesDTO; import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.ProtocolDict; import com.casic.missiles.modular.device.dto.BusProtocolDTO; import com.casic.missiles.modular.device.entity.BusProtocol; import com.casic.missiles.modular.device.service.IBusProtocolService; @@ -35,10 +38,10 @@ @RestController @RequestMapping("/system/busProtocol") public class BusProtocolController extends ExportController { - + private final IBusProtocolService protocolService; - + @ApiOperation("查询分页接口") @PostMapping("/listPage") @ResponseBody @@ -47,9 +50,10 @@ queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getProtocolName()), "PROTOCOL_NAME", requestDTO.getProtocolName()); queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getProtocolCode()), "PROTOCOL_CODE", requestDTO.getProtocolCode()); Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(protocolService.page(page,queryWrapper))); + return ReturnUtil.success(super.packForBT(protocolService.page(page, queryWrapper))); } + @OperateLog(value = "新增协议", key = "protocolName,protocolCode,version,ip,description", dict = ProtocolDict.class, type = "add") @ApiOperation("新增") @PostMapping("/add") @ResponseBody @@ -58,6 +62,7 @@ return ReturnUtil.success(protocolService.save(busProtocol)); } + @OperateLog(value = "编辑协议", dict = ProtocolDict.class, serviceClass = IBusProtocolService.class, type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -68,10 +73,11 @@ return ReturnUtil.success(protocolService.updateById(busProtocol)); } + @OperateLog(value = "删除协议", key = "protocolName", dict = ProtocolDict.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 23ddee9..24c4712 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 @@ -2,7 +2,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.entity.BusDevice; import com.casic.missiles.util.InConditionDriver; @@ -46,27 +45,27 @@ @Param("orderColumn") String orderColumn, @Param("request") CommonRequestDTO request); - @Select("SELECT BFZT from bus_device where VALID=1 and DEVCODE= #{devcode} limit 1" ) - String getBfcf( @Param("devcode") String devcode); + @Select("SELECT BFZT from bus_device where VALID=1 and DEVCODE= #{devcode} limit 1") + String getBfcf(@Param("devcode") String devcode); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getMethaneData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getMethaneData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_tube_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getTubeOtherData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_tube_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getTubeOtherData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gasliquid_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getLGData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gasliquid_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getLGData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_monitor_pipe_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getMonitorPipeOtherData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_monitor_pipe_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getMonitorPipeOtherData(@Param("devcodes") List devcodes); - @Select("SELECT ALARM_THRESHOLD FROM `alarm_rule_device` where DEVCODE = #{devcode} order by ALARM_THRESHOLD asc " ) + @Select("SELECT ALARM_THRESHOLD FROM `alarm_rule_device` where DEVCODE = #{devcode} order by ALARM_THRESHOLD asc ") List getSpecialDeviceRule(@Param("devcode") String devcode); @Select(" select ar.ALARM_THRESHOLD from alarm_rule ar where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + @@ -81,4 +80,7 @@ "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") List getListByWellId(@Param("wellId") Long wellId); + + BusDeviceOperateLogDTO getByDeviceId(@Param("id") Long id); + } 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 8ba4b15..3109344 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 @@ -44,7 +44,7 @@ LEFT JOIN base_product bp ON bd.PRODUCT_ID = bp.ID LEFT JOIN bus_device_ledger br on br.DEVICE_ID = bd.ID AND br.VALID='1' LEFT JOIN bus_manufacturer bm on bm.ID = bp.MANUFACTURER_ID - LEFT JOIN bus_ledger_all_view bl on bl.ID = br.LEDGER_ID AND br.VALID='1' and bl.type = br.type + LEFT JOIN bus_ledger_all_view bl on bl.ID = br.LEDGER_ID AND bl.VALID='1' and bl.type = br.type where bd.valid>0 @@ -95,6 +95,32 @@ + + + SELECT - rd.*, - at.alarm_type, - bt.TYPE_NAME as devTypeName - FROM - alarm_records rd - LEFT JOIN bus_ledger_all_view lr ON lr.ledgerCode = rd.LEDGER_CODE - LEFT JOIN alarm_type at ON at.ID = rd.ALARM_TYPE_ID - LEFT JOIN bus_device bd ON bd.DEVCODE = rd.DEVCODE and bd.valid >0 - LEFT JOIN base_device_type bt ON bt.id = bd.DEVICE_TYPE + rd.*, + AT.alarm_type, + bt.TYPE_NAME AS devTypeName + FROM + alarm_records rd + LEFT JOIN bus_device bd ON bd.DEVCODE = rd.DEVCODE + AND bd.valid > 0 + LEFT JOIN bus_device_ledger bl ON bd.ID = bl.DEVICE_ID + AND bl.VALID = '1' + 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' + AND lr.ledgerCode = rd.LEDGER_CODE + LEFT JOIN alarm_type AT ON AT.ID = rd.ALARM_TYPE_ID + LEFT JOIN base_device_type bt ON bt.id = bd.DEVICE_TYPE where rd.STATUS ='1' and rd.EXCEPTION_TYPE='0' @@ -695,6 +705,7 @@ dt.LOGTIME, bv.tagNumber, bv.ledgerCode, + bv.ledgerName, bdt.TYPE_NAME, bv.place, bv.type, @@ -720,6 +731,7 @@ t.tagNumber, t.ledgerCode, t.TYPE_NAME, + t.ledgerName, t.OFF_DAYS, t.LOGTIME, t.place, diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml index 7aff0f0..a63dac1 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml @@ -25,34 +25,55 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java index 3e0edd6..9dab3a7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java @@ -71,4 +71,18 @@ private Long deptid; + @ApiModelProperty("经度") + private String lngGaode; + + @ApiModelProperty("纬度") + private String latGaode; + + @ApiModelProperty("监测类型") + private String watchObject; + + @ApiModelProperty("点位id") + private Long ledgerId; + + + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java index e938da8..60464c4 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java @@ -12,6 +12,7 @@ private String deviceType; private String tagNumber; private String ledgerCode; + private String ledgerName; private String place; //台账类型 private String type; 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 ac4cabe..e623df7 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 @@ -44,6 +44,7 @@ import static cn.hutool.core.date.DateUnit.DAY; import static com.casic.missiles.util.TimeConvertUtil.TimeConverter; +import static com.casic.missiles.util.TimeConvertUtil.TimeConverterSecond; /** *

@@ -180,8 +181,8 @@ public DeviceAlarmDetailDTO deviceAlarmDetail(Long id) { DeviceAlarmDetailDTO alarmDetail = this.baseMapper.deviceAlarmDetail(id); - alarmDetail.setCancelDuration(TimeConverter(alarmDetail.getCancelDuration())); - alarmDetail.setProcessDuration(TimeConverter(alarmDetail.getProcessDuration())); + alarmDetail.setCancelDuration(TimeConverterSecond(alarmDetail.getCancelDuration())); + alarmDetail.setProcessDuration(TimeConverterSecond(alarmDetail.getProcessDuration())); alarmDetail.setDeptName(ObjectUtil.isNotEmpty(alarmDetail.getDeptid()) ? commonServer.getDeptNamesByDeptId(alarmDetail.getDeptid()) : ""); // alarmDetail.setAddress(alarmDetail.getTagNumber().concat("|").concat(alarmDetail.getLedgerName())); alarmDetail.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmDetail.getAlarmCategory())); @@ -524,16 +525,26 @@ @Override public void cancelDeviceAlarm(String devCode) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("DEVCODE", devCode); - updateWrapper.eq("EXCEPTION_TYPE", "1"); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE", devCode); + queryWrapper.eq("EXCEPTION_TYPE", "1"); //只有挂起和已处置的才消 // updateWrapper.ge("PROCESS_STATUS", "3"); - updateWrapper.eq("STATUS", "1"); - updateWrapper.set("STATUS", "0"); - updateWrapper.set("CANCEL_TIME", new Date()); - this.update(updateWrapper); - //toDo:需要加流程取消日志 + queryWrapper.eq("STATUS", "1"); + List alarmRecordsList = this.list(queryWrapper); + if (alarmRecordsList != null && alarmRecordsList.size() > 0) { + alarmRecordsList.forEach(alarmRecords -> { + alarmRecords.setStatus("0"); + alarmRecords.setCancelTime(new Date()); + alarmRecords.setPreProcessStatus(alarmRecords.getProcessStatus()); + alarmRecords.setProcessStatus(ApprovalStatusEnum.FINISHED.getCode()); + this.updateById(alarmRecords); + }); + //添加流程日志 + approvalLogMapper.insert(new ApprovalLog(alarmRecordsList.get(0).getId(), "1", + "", ApprovalStatusEnum.FINISHED.getCode(), + null)); + } } @Override @@ -674,8 +685,12 @@ AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), data.concat("%LEL"), data, - alarmRuleResponseDTO.getAlarmLevelId(),DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmLevelId(), DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmRuleResponseDTO.getAlarmTypeName(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -721,7 +736,7 @@ @Override - public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime,List busWellDTOList, + public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime, List busWellDTOList, Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { @@ -730,8 +745,12 @@ try { AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, - alarmLevelId, DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmLevelId, DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmTypeName, + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace() + , "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -793,7 +812,11 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.get().getAlarmTypeId(), alarmRuleResponseDTO.get().getAlarmTypeName(), alarmRuleResponseDTO.get().getAlarmLevelId(), DateUtil.parse(logTime), - alarmRuleResponseDTO.get().getAlarmThreshold(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "1"); + alarmRuleResponseDTO.get().getAlarmThreshold(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "1"); this.save(alarmRecords); } catch (Exception e) { e.printStackTrace(); @@ -846,8 +869,8 @@ * @param cell */ @Override - public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent,String logTime) { - this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent,DateUtil.parse(logTime)); + public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent, String logTime) { + this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent, DateUtil.parse(logTime)); } @Override @@ -903,7 +926,10 @@ offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), - offDeviceDTO.getPlace(), "1"); + ObjectUtil.isNotEmpty(offDeviceDTO.getLedgerName()) ? + offDeviceDTO.getTagNumber().concat("|"). + concat(offDeviceDTO.getLedgerName()) : + offDeviceDTO.getPlace(), "1"); alarmRecordsList.add(alarmRecords); ledgers.add(offDeviceDTO); } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java new file mode 100644 index 0000000..cb554b9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.data.dto; + + +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class PanDataDTO implements Serializable { + + private static final long serialVersionUID = 1232822221212L; + + private String dataTime; + + private String attributeType; + + private String dataValue; + + private String deviceCode; + + + +} 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 index a082d00..2a943ad 100644 --- 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 @@ -23,6 +23,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -37,6 +38,7 @@ * @author zt * @since 2025-01-22 */ +@Slf4j @RequiredArgsConstructor @Service public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { @@ -71,8 +73,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -80,8 +81,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}",devCode, e); } } @@ -141,8 +141,7 @@ } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -222,8 +221,10 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); +// e.printStackTrace(); +// log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); + } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java index dd80611..cd24860 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java @@ -83,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -124,8 +123,7 @@ busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -200,8 +198,7 @@ alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } //低电量报警处理 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 302b446..f0def39 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 @@ -76,8 +76,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -85,8 +84,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -133,8 +131,7 @@ if (i < jsonArray.size() - 1) continue; busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -217,8 +214,7 @@ } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } 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 e5ba8f7..a02af88 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataMonitorPipeOtherServiceImpl extends ServiceImpl implements IDataMonitorPipeOtherService, IDataAbstractService { @@ -73,8 +75,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -116,8 +116,7 @@ //2.写入新的报警 alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + log.error("处理报警时发生异常,devcode:{},e:{}", devCode, e); } } } @@ -160,8 +159,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmEventCode)); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -341,8 +339,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag || ObjectUtil.isNotEmpty(alarmContent) ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java index 5dc8c2b..f383690 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java @@ -2,7 +2,6 @@ import cn.hutool.core.date.DateUtil; 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; @@ -13,15 +12,20 @@ import com.casic.missiles.modular.alarm.service.IAlarmRuleService; import com.casic.missiles.modular.data.dao.DataGasMapper; import com.casic.missiles.modular.data.dao.DataPanGasMapper; +import com.casic.missiles.modular.data.dto.PanDataDTO; import com.casic.missiles.modular.data.entity.DataPanGas; import com.casic.missiles.modular.data.service.IDataPanGasService; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.CommonUtil; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonToken; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.io.IOException; import java.util.Date; import java.util.List; import java.util.Map; @@ -68,78 +72,179 @@ } - @Transactional @Override public boolean processAcceptGasData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); - JSONArray jsonArray = jsonObject.getJSONArray("data"); - String devCode = ""; - for (int i = 0; i < jsonArray.size(); i++) { - try { - devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); - if (ObjectUtil.isEmpty(devCode)) continue; - List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); - String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); - String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); - //暂只存浓度 - if ("2".equals(attributeType)) continue; - String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); - gas = String.format("%.2f", Double.valueOf(gas)); - //1.存数据 - save(DataPanGas.builder() - .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") - .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") - .deviceCode(devCode) - .concentration(gas) - .logtime(DateUtil.parseDateTime(dataTime)) - .build());//存储采集数据 - //2.有无超限处理流程(判断最后一条数据) -// if (i < jsonArray.size() - 1) continue; - - //3.清除设备告警 - alarmRecordsService.cancelDeviceAlarm(devCode); - //4.存报警 - //若没绑场站,则不产生报警 - boolean alarmFlag = false; - String bfcf = busDeviceService.getBfcf(devCode); - 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))) { - dataTime = dataTime.replaceAll("-", ""); - dataTime = dataTime.replaceAll(":", ""); - dataTime = dataTime.replaceAll("\\s+", ""); - alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); - } - break; - } - } - } - //5.清数据报警 - if (!alarmFlag) { - alarmRecordsService.cancelDataAlarm(devCode); - } - //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); - //7.更新监测井状态 (1:正常,2:报警) - if (busWellDTOList != null && busWellDTOList.size() > 0) { - alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); - } - } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + JsonFactory factory = new JsonFactory(); + try (JsonParser parser = factory.createParser(jsonObject.getString("data"))) { + // 定位到 "data" 数组 + while (parser.nextToken() != JsonToken.START_ARRAY) { + parser.nextToken(); } + // 逐条处理数据 + while (parser.nextToken() != JsonToken.END_ARRAY) { + if (parser.getCurrentToken() == JsonToken.START_OBJECT) { + processSingleData(parseJsonObject(parser)); + } + + } + } catch (IOException e) { + e.printStackTrace(); } + return true; } + private PanDataDTO parseJsonObject(JsonParser parser) throws IOException { + PanDataDTO panDataDTO = new PanDataDTO(); + while (parser.nextToken() != JsonToken.END_OBJECT) { + String fieldName = parser.getCurrentName(); + if ("dataTime".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataTime(parser.getText()); + } else if ("attributeType".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setAttributeType(parser.getText()); + } else if ("dataValue".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataValue(parser.getText()); + } else if ("deviceCode".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDeviceCode(parser.getText()); + } + } + return panDataDTO; + } + + + private void processSingleData(PanDataDTO panDataDTO) { + try { + String devCode = panDataDTO.getDeviceCode(); + if (ObjectUtil.isEmpty(devCode)) return; + List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); + String gas = panDataDTO.getDataValue(); + String attributeType = panDataDTO.getAttributeType(); + //暂只存浓度 + if ("2".equals(attributeType)) return; + String dataTime = panDataDTO.getDataTime(); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataPanGas.builder() + .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .deviceCode(devCode) + .concentration(gas) + .logtime(DateUtil.parseDateTime(dataTime)) + .build());//存储采集数据 + + boolean alarmFlag = false; + String bfcf = busDeviceService.getBfcf(devCode); + 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))) { +// dataTime = dataTime.replaceAll("-", ""); +// dataTime = dataTime.replaceAll(":", ""); +// dataTime = dataTime.replaceAll("\\s+", ""); + alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); + //7.更新监测井状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + log.error("处理云台数据时发生异常,devcode:{},data:{},e:{}", panDataDTO.getDeviceCode(), panDataDTO.toString(), e); + } + } + + +// @Transactional +// @Override +// public boolean processAcceptGasData(Map dataParams) { +// JSONObject jsonObject = new JSONObject(dataParams); +// JSONArray jsonArray = jsonObject.getJSONArray("data"); +// String devCode = ""; +// for (int i = 0; i < jsonArray.size(); i++) { +// try { +// devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); +// if (ObjectUtil.isEmpty(devCode)) continue; +// List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); +// String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); +// String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); +// //暂只存浓度 +// if ("2".equals(attributeType)) continue; +// String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); +// gas = String.format("%.2f", Double.valueOf(gas)); +// //1.存数据 +// save(DataPanGas.builder() +// .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") +// .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") +// .deviceCode(devCode) +// .concentration(gas) +// .logtime(DateUtil.parseDateTime(dataTime)) +// .build());//存储采集数据 +// //2.有无超限处理流程(判断最后一条数据) +//// if (i < jsonArray.size() - 1) continue; +// +// //3.清除设备告警 +//// alarmRecordsService.cancelDeviceAlarm(devCode); +// //4.存报警 +// //若没绑场站,则不产生报警 +// boolean alarmFlag = false; +// String bfcf = busDeviceService.getBfcf(devCode); +// 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))) { +//// dataTime = dataTime.replaceAll("-", ""); +//// dataTime = dataTime.replaceAll(":", ""); +//// dataTime = dataTime.replaceAll("\\s+", ""); +// alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); +// } +// break; +// } +// } +// } +// //5.清数据报警 +// if (!alarmFlag) { +// alarmRecordsService.cancelDataAlarm(devCode); +// } +// //6.更新电量及状态 (1:正常,2:报警) +// alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); +// //7.更新监测井状态 (1:正常,2:报警) +// if (busWellDTOList != null && busWellDTOList.size() > 0) { +// alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); +// } +// } catch (Exception e) { +// log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); +// } +// } +// return true; +// } + @Override public boolean acceptAlarmData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); 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 37d731d..a17953b 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataTubeOtherServiceImpl extends ServiceImpl implements IDataTubeOtherService, IDataAbstractService { @@ -73,7 +75,7 @@ } } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,7 +84,7 @@ imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -122,8 +124,8 @@ } //特殊处理消警 if ("CancelWaterImmersionAlarm".equals(alarmType)) { - if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { - alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + if (alarmRecordsService.isWatchAlarms(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelWatchAlarms(devCode, "WaterImmersionAlarm"); } continue; } @@ -146,8 +148,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmType)); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -227,8 +228,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java new file mode 100644 index 0000000..3be65dd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java @@ -0,0 +1,170 @@ +package com.casic.missiles.modular.aop; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.aop.annotion.ReflectionUtils; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.modular.interfaces.log.LogManager; +import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.Serializable; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Aspect +@Component +public class OperateLogAspect { + private Logger log = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private ApplicationContext applicationContext; + + public static volatile Map oldMap = new HashMap<>(); + + public OperateLogAspect() { + } + + @Pointcut("@annotation(com.casic.missiles.modular.aop.annotion.OperateLog)") + public void cutService() { + } + + @Around("cutService()") + public Object recordSysLog(ProceedingJoinPoint point) throws Throwable { + Object result = point.proceed(); + + try { + this.handle(point); + } catch (Exception var4) { + this.log.error("日志记录出错!", var4); + } + + return result; + } + + /** + * 处理请求前执行 + */ + @Before(value = "@annotation(operateLog)") + public void boBefore(JoinPoint joinPoint, OperateLog operateLog) { + Object info = joinPoint.getArgs()[0]; + if ("edit".equals(operateLog.type()) && operateLog.needDefaultCompare()) { + Class cls = operateLog.serviceClass(); + IService service = (IService) applicationContext.getBean(cls); + Object result; + if (service instanceof IBusDeviceService) { + result = ((IBusDeviceService) service).getByDeviceId((Long) ReflectionUtils.getFieldValue(info, "id")); + } else + result = service.getById((Serializable) ReflectionUtils.getFieldValue(info, "id")); + oldMap = (Map) objectToMap(result); // 存储修改前的对象 + } + } + + private void handle(ProceedingJoinPoint point) throws Exception { + Signature sig = point.getSignature(); + MethodSignature msig = null; + if (!(sig instanceof MethodSignature)) { + throw new IllegalArgumentException("该注解只能用于方法"); + } else { + msig = (MethodSignature) sig; + Object target = point.getTarget(); + Method currentMethod = target.getClass().getMethod(msig.getName(), msig.getParameterTypes()); + String methodName = currentMethod.getName(); + AuthUser user = ShiroKit.getUser(); + if (null != user) { + String className = point.getTarget().getClass().getName(); + Object[] params = point.getArgs(); + OperateLog annotation = (OperateLog) currentMethod.getAnnotation(OperateLog.class); + String bussinessName = annotation.value(); + String key = annotation.key(); + Class dictClass = annotation.dict(); + String sb = argsArrayToString(params); + String msg = sb; + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + if ("add".equals(annotation.type())) { + Map parameters = (Map) objectToMap(params[0]); + msg = CollectionUtils.isEmpty(parameters) ? sb : ReflectionUtils.parseMutiKey(dictMap, key, parameters); + } else if ("edit".equals(annotation.type())) { + msg = CollectionUtils.isEmpty(oldMap) ? sb : ReflectionUtils.contrastObj(dictClass, key, params[0], oldMap); + }else if("delete".equals(annotation.type())){ + msg=dictMap.get(annotation.key())+":"+ReflectionUtils.getDeleteKeys(params[0]); + } + LogManager.me().executeLog(LogTaskFactory.bussinessLog(user.getId(), bussinessName, className, methodName, msg)); + } + } + } + + + /** + * 参数拼装 + */ + private String argsArrayToString(Object[] paramsArray) { + Gson gson = new GsonBuilder().create(); + String params = ""; + if (paramsArray != null && paramsArray.length > 0) { + for (int i = 0; i < paramsArray.length; i++) { + if (!isFilterObject(paramsArray[i])) { + params += gson.toJson(paramsArray[i]) + " & "; + } + } + } + return params.trim(); + } + + + /** + * 判断是否需要过滤的对象。 + * + * @param o 对象信息。 + * @return 如果是需要过滤的对象,则返回true;否则返回false。 + */ + public boolean isFilterObject(final Object o) { + return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse; + } + + private Map objectToMap(Object obj) { + if (obj == null) { + return null; + } + ObjectMapper mapper = new ObjectMapper(); + mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + // 如果使用JPA请自己打开这条配置 + // mapper.addMixIn(Object.class, IgnoreHibernatePropertiesInJackson.class); + Map mappedObject = mapper.convertValue(obj, Map.class); + return mappedObject; + + + } +} + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java new file mode 100644 index 0000000..77afa9c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.aop.annotion; + +import java.lang.annotation.*; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.FIELD}) +@Documented +public @interface DataName { + String name() default ""; // 字段名称 + + /** + * 读取枚举内容转义表达式 (如: 0=男,1=女,2=未知) + */ + String readConverterExp() default ""; +} + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java new file mode 100644 index 0000000..f1f59ad --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.aop.annotion; + + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.common.constant.dictmap.base.SystemDict; + +import java.lang.annotation.*; + +@Inherited +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.METHOD}) +public @interface OperateLog { + String value() default ""; + + String key() default "id"; + + Class serviceClass() default IService.class; + + // 是否需要比较新旧数据 + boolean needDefaultCompare() default true; + + //操作类型 add update delete + String type() default "update"; + + Class dict() default SystemDict.class; +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java new file mode 100644 index 0000000..eb773ad --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java @@ -0,0 +1,328 @@ +package com.casic.missiles.modular.aop.annotion; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.modular.interfaces.dictmap.factory.DictFieldWrapperFactory; +import lombok.extern.slf4j.Slf4j; + +import java.beans.PropertyDescriptor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.*; + +import static com.casic.missiles.modular.interfaces.utils.Contrast.firstCharToLowerCase; +import static com.casic.missiles.modular.interfaces.utils.Contrast.firstCharToUpperCase; + +@Slf4j +public class ReflectionUtils { + + /** + * 直接读取对象属性值, 无视private/protected修饰符, 不经过getter函数. + * + * @param obj 读取的对象 + * @param fieldName 读取的列 + * @return 属性值 + */ + public static Object getFieldValue(final Object obj, final String fieldName) { + Field field = getAccessibleField(obj, fieldName); + if (field == null) { + throw new IllegalArgumentException("Could not find field [" + fieldName + "] on target [" + obj + "]"); + } + + Object result = null; + try { + result = field.get(obj); + } catch (IllegalAccessException e) { + log.error("不可能抛出的异常{}", e.getMessage()); + e.printStackTrace(); + } + return result; + } + + /** + * 循环向上转型, 获取对象的DeclaredField, 并强制设置为可访问.如向上转型到Object仍无法找到, 返回null. + * + * @param obj 查找的对象 + * @param fieldName 列名 + * @return 列 + */ + public static Field getAccessibleField(final Object obj, final String fieldName) { + for (Class superClass = obj.getClass(); superClass != Object.class; superClass = superClass.getSuperclass()) { + try { + Field field = superClass.getDeclaredField(fieldName); + makeAccessible(field); + return field; + } catch (NoSuchFieldException e) { // NOSONAR + // Field不在当前类定义,继续向上转型 + e.printStackTrace(); + continue; // new add + } + } + return null; + } + + /** + * 改变private/protected的成员变量为public,尽量不调用实际改动的语句,避免JDK的SecurityManager抱怨。 + * + * @param + */ + public static void makeAccessible(Field field) { + if ((!Modifier.isPublic(field.getModifiers()) || !Modifier.isPublic(field.getDeclaringClass().getModifiers()) || Modifier + .isFinal(field.getModifiers())) && !field.isAccessible()) { + field.setAccessible(true); + } + } + + /** + * 获取两个对象同名属性内容不相同的列表 + * + * @param class1 old对象 + * @param class2 new对象 + * @return 区别列表 + * @throws ClassNotFoundException 异常 + * @throws IllegalAccessException 异常 + */ + public static List> compareTwoClass(Object class1, Object class2) throws ClassNotFoundException, IllegalAccessException { + List> list = new ArrayList>(); + // 获取对象的class + Class clazz1 = class1.getClass(); + Class clazz2 = class2.getClass(); + // 获取对象的属性列表 + Field[] field1 = clazz1.getDeclaredFields(); + Field[] field2 = clazz2.getDeclaredFields(); + StringBuilder sb = new StringBuilder(); + // 遍历属性列表field1 + for (int i = 0; i < field1.length; i++) { + // 遍历属性列表field2 + for (int j = 0; j < field2.length; j++) { + // 如果field1[i]属性名与field2[j]属性名内容相同 + if (field1[i].getName().equals(field2[j].getName())) { + if (field1[i].getName().equals(field2[j].getName())) { + field1[i].setAccessible(true); + field2[j].setAccessible(true); + // 如果field1[i]属性值与field2[j]属性值内容不相同 + if (!compareTwo(field1[i].get(class1), field2[j].get(class2))) { + Map map2 = new HashMap(); + DataName name = field1[i].getAnnotation(DataName.class); + String fieldName = ""; + if (name != null) { + fieldName = name.name(); + } else { + fieldName = field1[i].getName(); + } + map2.put("name", fieldName); + map2.put("old", field1[i].get(class1)); + map2.put("new", field2[j].get(class2)); + list.add(map2); + } + break; + } + } + } + } + return list; + } + + /** + * 对比两个数据是否内容相同 + * + * @param object1 比较对象1 + * @param object2 比较对象2 + * @return boolean类型 + */ + public static boolean compareTwo(Object object1, Object object2) { + if (object1 == null && object2 == null) { + return true; + } + if (object1 == null && object2 != null) { + return false; + } + if (object1.equals(object2)) { + return true; + } + return false; + } + + public static String contrastObjByName(Class dictClass, String key, Object pojo1, Map pojo2) throws IllegalAccessException, InstantiationException { + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + String str = parseMutiKey(dictMap, key, pojo2) + ";;;"; + + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if (!"serialVersionUID".equals(field.getName())) { + String prefix = "get"; + int prefixLength = 3; + if (field.getType().getName().equals("java.lang.Boolean")) { + prefix = "is"; + prefixLength = 2; + } + + Method getMethod = null; + + try { + getMethod = clazz.getDeclaredMethod(prefix + firstCharToUpperCase(field.getName())); + } catch (NoSuchMethodException var22) { + System.err.println("this className:" + clazz.getName() + " is not methodName: " + var22.getMessage()); + continue; + } + + Object o1 = getMethod.invoke(pojo1); + Object o2 = pojo2.get(firstCharToLowerCase(getMethod.getName().substring(prefixLength))); + if (o1 != null && o2 != null) { + if (o1 instanceof Date) { + o1 = DateUtil.format(new Date(), "yyyy-MM-dd"); + } else if (o1 instanceof Integer) { + o2 = Integer.parseInt(o2.toString()); + } + + if (!o1.toString().equals(o2.toString())) { + if (i != 1) { + str = str + ";;;"; + } + + String fieldName = dictMap.get(field.getName()); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(field.getName()); + if (fieldWarpperMethodName != null) { + Object o1Warpper = DictFieldWrapperFactory.createFieldWrapper(o1, fieldWarpperMethodName); + Object o2Warpper = DictFieldWrapperFactory.createFieldWrapper(o2, fieldWarpperMethodName); + str = str + "字段名称:" + fieldName + ",旧值:" + o1Warpper + ",新值:" + o2Warpper; + } else { + str = str + "字段名称:" + fieldName + ",旧值:" + o1 + ",新值:" + o2; + } + + ++i; + } + } + } + } + } catch (Exception var23) { + var23.printStackTrace(); + } + + return str; + } + + public static String parseMutiKey(AbstractDictMap dictMap, String key, Map requests) { + StringBuilder sb = new StringBuilder(); + if (key.indexOf(",") != -1) { + String[] keys = key.split(","); + String[] var13 = keys; + int var14 = keys.length; + + for (int var7 = 0; var7 < var14; ++var7) { + String item = var13[var7].trim(); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(item); + Object value = requests.get(item); + if (fieldWarpperMethodName != null) { + Object valueWarpper = DictFieldWrapperFactory.createFieldWrapper(value, fieldWarpperMethodName); + sb.append(dictMap.get(item) + "=" + valueWarpper + ","); + } else { + sb.append(dictMap.get(item) + "=" + (ObjectUtil.isNotEmpty(value) ? value.toString() : "") + ","); + } + } + + return StrUtil.removeSuffix(sb.toString(), ","); + } else { + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(key); + Object value = requests.get(key); + if (fieldWarpperMethodName != null) { + Object valueWarpper = DictFieldWrapperFactory.createFieldWrapper(value, fieldWarpperMethodName); + sb.append(dictMap.get(key) + "=" + valueWarpper); + } else { + sb.append(dictMap.get(key) + "=" + (ObjectUtil.isNotEmpty(value) ? value.toString() : "")); + } + + return sb.toString(); + } + } + + public static String getDeleteKeys(Object pojo1) { + String str = ""; + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if ("keys".equals(field.getName())) { + PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); + Method getMethod = pd.getReadMethod(); + Object o1 = getMethod.invoke(pojo1); + return ObjectUtil.isNotEmpty(o1) ? o1.toString().replaceAll("\\[|]", "") : "".concat(",已删除"); + } + } + + } catch (Exception var21) { + var21.printStackTrace(); + } + return str; + } + + public static String contrastObj(Class dictClass, String key, Object pojo1, Map pojo2) throws IllegalAccessException, InstantiationException { + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); +// String str = parseMutiKey(dictMap, key, pojo2) + ";;;"; + String str = ""; + + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if (!"serialVersionUID".equals(field.getName())) { + PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); + Method getMethod = pd.getReadMethod(); + Object o1 = getMethod.invoke(pojo1); + Object o2 = pojo2.get(firstCharToLowerCase(getMethod.getName().substring(3))); + if (o1 != null && o2 != null) { + if (o1 instanceof Integer) { + o2 = Integer.parseInt(o2.toString()); + } else if (o1 instanceof Date) { + o1 = DateUtil.format((Date) o1, "yyyy-MM-dd HH:mm:ss"); + } + + if (!o1.toString().equals(o2.toString())) { + if (i != 1) { + str = str + ";"; + } + + String fieldName = dictMap.get(field.getName()); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(field.getName()); + if (fieldWarpperMethodName != null) { + Object o1Warpper = DictFieldWrapperFactory.createFieldWrapper(o1, fieldWarpperMethodName); + Object o2Warpper = DictFieldWrapperFactory.createFieldWrapper(o2, fieldWarpperMethodName); + str = str + fieldName + ":将【" + o1Warpper + "】,改为【" + o2Warpper + "】"; + } else { + str = str + fieldName + ":将【" + o1 + "】,改为【" + o2 + "】"; + } + + ++i; + } + } + } + } + } catch (Exception var21) { + var21.printStackTrace(); + } + + return str; + } + + +} \ No newline at end of file diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java index 7497ebf..18fd820 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java @@ -8,12 +8,14 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.StateDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.DeviceTypeDict; import com.casic.missiles.modular.device.dto.BaseDeviceTypeDTO; import com.casic.missiles.modular.device.dto.BaseDeviceTypeIdsDTO; import com.casic.missiles.modular.device.dto.SelectDTO; @@ -63,6 +65,7 @@ return ReturnUtil.success(super.packForBT(baseDeviceTypePage)); } + @OperateLog(value = "新增设备类型", key = "typeName,watchObject,isUsed,typeDescription", dict = DeviceTypeDict.class, type = "add") @ApiOperation("增加设备类型") @PostMapping("/add") @ResponseBody @@ -71,6 +74,7 @@ return ReturnUtil.success(iBaseDeviceTypeService.saveBaseDeviceType(baseDeviceType)); } + @OperateLog(value = "编辑设备类型", dict = DeviceTypeDict.class, serviceClass = IBaseDeviceTypeService.class, type = "edit") @ApiOperation("编辑设备类型") @PostMapping("/edit") @ResponseBody @@ -81,10 +85,11 @@ return ReturnUtil.success(iBaseDeviceTypeService.updateById(baseDeviceType)); } + @OperateLog(value = "删除设备类型", key = "typeName", dict = DeviceTypeDict.class, serviceClass = IBaseDeviceTypeService.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); @@ -113,7 +118,7 @@ public ReturnDTO selectList(@RequestBody BaseDeviceTypeIdsDTO request) { QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.in(request.getDeviceTypeList()!=null&&request.getDeviceTypeList().size()>0, "id", request.getDeviceTypeList()); + queryWrapper.in(request.getDeviceTypeList() != null && request.getDeviceTypeList().size() > 0, "id", request.getDeviceTypeList()); queryWrapper.eq("IS_USED", "1"); List baseDeviceTypes = iBaseDeviceTypeService.list(queryWrapper); List selectDTOS = new ArrayList<>(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java index 42d752d..54944e2 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java @@ -3,14 +3,15 @@ import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.IdDTO; -import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.ProductDict; import com.casic.missiles.modular.device.dto.BaseProductDTO; import com.casic.missiles.modular.device.dto.SelectProductDTO; import com.casic.missiles.modular.device.entity.BaseProduct; @@ -21,7 +22,6 @@ import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; -import java.util.List; import java.util.Objects; /** @@ -49,6 +49,7 @@ return ReturnUtil.success(super.packForBT(iBaseProductService.pageList(page, requestDTO))); } + @OperateLog(value = "新增产品", key = "productName,deviceType,deviceModel,manufacturerId,protocol,accessMethod,powerSupplyMode,dataService", dict = ProductDict.class, type = "add") @ApiOperation("新增") @PostMapping("/add") @ResponseBody @@ -58,6 +59,7 @@ } + @OperateLog(value = "编辑产品", dict = ProductDict.class, serviceClass = IBaseProductService.class, type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -68,10 +70,11 @@ return ReturnUtil.success(iBaseProductService.updateBaseProductById(baseProduct)); } + @OperateLog(value = "删除产品", key = "productName", dict = ProductDict.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 509bd7b..103acf2 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 @@ -9,6 +9,7 @@ import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; @@ -17,6 +18,7 @@ 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.aop.annotion.OperateLog; import com.casic.missiles.modular.device.dict.BusConfigDict; import com.casic.missiles.modular.device.dict.DeviceDict; import com.casic.missiles.modular.device.dto.*; @@ -65,7 +67,8 @@ } - @BussinessLog(value = "新增设备", key = "devcode,deviceName,deviceType,installDate,productId", dict = DeviceDict.class) + @OperateLog(value = "新增设备", key = "devcode,deviceType,productId," + + "valid,communicationType,simId,warrantyPeriod,tagNumber,leftLength,rightLength,", dict = DeviceDict.class,type = "add") @CacheEvict(value="busLedgersCache", key="#busDevice.getDevcode()") @ApiOperation("新增") @PostMapping("/add") @@ -75,7 +78,8 @@ } - @BussinessLog(value = "编辑设备", key = "devcode,deviceName,deviceType,installDate,productId", dict = DeviceDict.class) + @OperateLog(value = "编辑设备", key = "devcode,deviceType,installDate,productId," + + "leftLength,rightLength,communicationType,simId,warrantyPeriod", dict = DeviceDict.class,serviceClass = IBusDeviceService.class,type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -86,11 +90,12 @@ return ReturnUtil.success(iBusDeviceService.updateBusDevice(busDevice)); } + @OperateLog(value = "删除设备", key = "devcode", dict = DeviceDict.class,serviceClass = IBusDeviceService.class,type = "delete") @CacheEvict(value="busLedgersCache", allEntries = true) @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 31de56e..6f35acd 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 @@ -4,8 +4,8 @@ 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.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.page.PageFactory; @@ -16,11 +16,8 @@ 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.BusDeviceDTO; -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.BusDevice; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.CommonUtil; @@ -53,6 +50,7 @@ private final IBusLedgerPipeService iBusLedgerPipeService; private final IBaseExportService iBaseExportService; + private final AbstractDictService abstractDictService; @ApiOperation("新建点位") @PostMapping("/addPosition") @@ -60,10 +58,10 @@ 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,"安装位号已存!!!"); + if (busLedgerPipeList != null && busLedgerPipeList.size() > 0) { + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE, "安装位号已存!!!"); } - Long id =IdUtil.getSnowflake(1,2).nextId(); + Long id = IdUtil.getSnowflake(1, 2).nextId(); busLedgerPipe.setId(id); busLedgerPipe.setLedgerCode(busLedgerPipe.getTagNumber()); busLedgerPipe.setArea(CommonUtil.getAreaCode(busLedgerPipe.getPosition())); @@ -139,7 +137,11 @@ page.setCurrent(1); page.setSize(Integer.MAX_VALUE); Page devicePage = iBusLedgerPipeService.listPage(page, busLedgerPipeRequestDTO); + List records = devicePage.getRecords(); try { + for (BusLedgerPipe busLedgerPipe : records) { + busLedgerPipe.setLocationCategory(abstractDictService.getDictNameByCode("locationType", busLedgerPipe.getLocationCategory())); + } iBaseExportService.exportExcel(response, BusLedgerPipe.class, devicePage.getRecords(), ExportEnum.LEDGER_PIPE_EXPORT.getSheetName()); } catch (Exception e) { e.printStackTrace(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java index e87f3f8..8040c74 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java @@ -7,10 +7,13 @@ 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.DeletesDTO; import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.ProtocolDict; import com.casic.missiles.modular.device.dto.BusProtocolDTO; import com.casic.missiles.modular.device.entity.BusProtocol; import com.casic.missiles.modular.device.service.IBusProtocolService; @@ -35,10 +38,10 @@ @RestController @RequestMapping("/system/busProtocol") public class BusProtocolController extends ExportController { - + private final IBusProtocolService protocolService; - + @ApiOperation("查询分页接口") @PostMapping("/listPage") @ResponseBody @@ -47,9 +50,10 @@ queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getProtocolName()), "PROTOCOL_NAME", requestDTO.getProtocolName()); queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getProtocolCode()), "PROTOCOL_CODE", requestDTO.getProtocolCode()); Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(protocolService.page(page,queryWrapper))); + return ReturnUtil.success(super.packForBT(protocolService.page(page, queryWrapper))); } + @OperateLog(value = "新增协议", key = "protocolName,protocolCode,version,ip,description", dict = ProtocolDict.class, type = "add") @ApiOperation("新增") @PostMapping("/add") @ResponseBody @@ -58,6 +62,7 @@ return ReturnUtil.success(protocolService.save(busProtocol)); } + @OperateLog(value = "编辑协议", dict = ProtocolDict.class, serviceClass = IBusProtocolService.class, type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -68,10 +73,11 @@ return ReturnUtil.success(protocolService.updateById(busProtocol)); } + @OperateLog(value = "删除协议", key = "protocolName", dict = ProtocolDict.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 23ddee9..24c4712 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 @@ -2,7 +2,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.entity.BusDevice; import com.casic.missiles.util.InConditionDriver; @@ -46,27 +45,27 @@ @Param("orderColumn") String orderColumn, @Param("request") CommonRequestDTO request); - @Select("SELECT BFZT from bus_device where VALID=1 and DEVCODE= #{devcode} limit 1" ) - String getBfcf( @Param("devcode") String devcode); + @Select("SELECT BFZT from bus_device where VALID=1 and DEVCODE= #{devcode} limit 1") + String getBfcf(@Param("devcode") String devcode); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getMethaneData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getMethaneData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_tube_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getTubeOtherData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_tube_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getTubeOtherData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gasliquid_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getLGData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gasliquid_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getLGData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_monitor_pipe_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getMonitorPipeOtherData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_monitor_pipe_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getMonitorPipeOtherData(@Param("devcodes") List devcodes); - @Select("SELECT ALARM_THRESHOLD FROM `alarm_rule_device` where DEVCODE = #{devcode} order by ALARM_THRESHOLD asc " ) + @Select("SELECT ALARM_THRESHOLD FROM `alarm_rule_device` where DEVCODE = #{devcode} order by ALARM_THRESHOLD asc ") List getSpecialDeviceRule(@Param("devcode") String devcode); @Select(" select ar.ALARM_THRESHOLD from alarm_rule ar where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + @@ -81,4 +80,7 @@ "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") List getListByWellId(@Param("wellId") Long wellId); + + BusDeviceOperateLogDTO getByDeviceId(@Param("id") Long id); + } 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 8ba4b15..3109344 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 @@ -44,7 +44,7 @@ LEFT JOIN base_product bp ON bd.PRODUCT_ID = bp.ID LEFT JOIN bus_device_ledger br on br.DEVICE_ID = bd.ID AND br.VALID='1' LEFT JOIN bus_manufacturer bm on bm.ID = bp.MANUFACTURER_ID - LEFT JOIN bus_ledger_all_view bl on bl.ID = br.LEDGER_ID AND br.VALID='1' and bl.type = br.type + LEFT JOIN bus_ledger_all_view bl on bl.ID = br.LEDGER_ID AND bl.VALID='1' and bl.type = br.type where bd.valid>0 @@ -95,6 +95,32 @@ + + + SELECT - rd.*, - at.alarm_type, - bt.TYPE_NAME as devTypeName - FROM - alarm_records rd - LEFT JOIN bus_ledger_all_view lr ON lr.ledgerCode = rd.LEDGER_CODE - LEFT JOIN alarm_type at ON at.ID = rd.ALARM_TYPE_ID - LEFT JOIN bus_device bd ON bd.DEVCODE = rd.DEVCODE and bd.valid >0 - LEFT JOIN base_device_type bt ON bt.id = bd.DEVICE_TYPE + rd.*, + AT.alarm_type, + bt.TYPE_NAME AS devTypeName + FROM + alarm_records rd + LEFT JOIN bus_device bd ON bd.DEVCODE = rd.DEVCODE + AND bd.valid > 0 + LEFT JOIN bus_device_ledger bl ON bd.ID = bl.DEVICE_ID + AND bl.VALID = '1' + 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' + AND lr.ledgerCode = rd.LEDGER_CODE + LEFT JOIN alarm_type AT ON AT.ID = rd.ALARM_TYPE_ID + LEFT JOIN base_device_type bt ON bt.id = bd.DEVICE_TYPE where rd.STATUS ='1' and rd.EXCEPTION_TYPE='0' @@ -695,6 +705,7 @@ dt.LOGTIME, bv.tagNumber, bv.ledgerCode, + bv.ledgerName, bdt.TYPE_NAME, bv.place, bv.type, @@ -720,6 +731,7 @@ t.tagNumber, t.ledgerCode, t.TYPE_NAME, + t.ledgerName, t.OFF_DAYS, t.LOGTIME, t.place, diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml index 7aff0f0..a63dac1 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml @@ -25,34 +25,55 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java index 3e0edd6..9dab3a7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java @@ -71,4 +71,18 @@ private Long deptid; + @ApiModelProperty("经度") + private String lngGaode; + + @ApiModelProperty("纬度") + private String latGaode; + + @ApiModelProperty("监测类型") + private String watchObject; + + @ApiModelProperty("点位id") + private Long ledgerId; + + + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java index e938da8..60464c4 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java @@ -12,6 +12,7 @@ private String deviceType; private String tagNumber; private String ledgerCode; + private String ledgerName; private String place; //台账类型 private String type; 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 ac4cabe..e623df7 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 @@ -44,6 +44,7 @@ import static cn.hutool.core.date.DateUnit.DAY; import static com.casic.missiles.util.TimeConvertUtil.TimeConverter; +import static com.casic.missiles.util.TimeConvertUtil.TimeConverterSecond; /** *

@@ -180,8 +181,8 @@ public DeviceAlarmDetailDTO deviceAlarmDetail(Long id) { DeviceAlarmDetailDTO alarmDetail = this.baseMapper.deviceAlarmDetail(id); - alarmDetail.setCancelDuration(TimeConverter(alarmDetail.getCancelDuration())); - alarmDetail.setProcessDuration(TimeConverter(alarmDetail.getProcessDuration())); + alarmDetail.setCancelDuration(TimeConverterSecond(alarmDetail.getCancelDuration())); + alarmDetail.setProcessDuration(TimeConverterSecond(alarmDetail.getProcessDuration())); alarmDetail.setDeptName(ObjectUtil.isNotEmpty(alarmDetail.getDeptid()) ? commonServer.getDeptNamesByDeptId(alarmDetail.getDeptid()) : ""); // alarmDetail.setAddress(alarmDetail.getTagNumber().concat("|").concat(alarmDetail.getLedgerName())); alarmDetail.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmDetail.getAlarmCategory())); @@ -524,16 +525,26 @@ @Override public void cancelDeviceAlarm(String devCode) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("DEVCODE", devCode); - updateWrapper.eq("EXCEPTION_TYPE", "1"); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE", devCode); + queryWrapper.eq("EXCEPTION_TYPE", "1"); //只有挂起和已处置的才消 // updateWrapper.ge("PROCESS_STATUS", "3"); - updateWrapper.eq("STATUS", "1"); - updateWrapper.set("STATUS", "0"); - updateWrapper.set("CANCEL_TIME", new Date()); - this.update(updateWrapper); - //toDo:需要加流程取消日志 + queryWrapper.eq("STATUS", "1"); + List alarmRecordsList = this.list(queryWrapper); + if (alarmRecordsList != null && alarmRecordsList.size() > 0) { + alarmRecordsList.forEach(alarmRecords -> { + alarmRecords.setStatus("0"); + alarmRecords.setCancelTime(new Date()); + alarmRecords.setPreProcessStatus(alarmRecords.getProcessStatus()); + alarmRecords.setProcessStatus(ApprovalStatusEnum.FINISHED.getCode()); + this.updateById(alarmRecords); + }); + //添加流程日志 + approvalLogMapper.insert(new ApprovalLog(alarmRecordsList.get(0).getId(), "1", + "", ApprovalStatusEnum.FINISHED.getCode(), + null)); + } } @Override @@ -674,8 +685,12 @@ AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), data.concat("%LEL"), data, - alarmRuleResponseDTO.getAlarmLevelId(),DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmLevelId(), DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmRuleResponseDTO.getAlarmTypeName(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -721,7 +736,7 @@ @Override - public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime,List busWellDTOList, + public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime, List busWellDTOList, Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { @@ -730,8 +745,12 @@ try { AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, - alarmLevelId, DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmLevelId, DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmTypeName, + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace() + , "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -793,7 +812,11 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.get().getAlarmTypeId(), alarmRuleResponseDTO.get().getAlarmTypeName(), alarmRuleResponseDTO.get().getAlarmLevelId(), DateUtil.parse(logTime), - alarmRuleResponseDTO.get().getAlarmThreshold(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "1"); + alarmRuleResponseDTO.get().getAlarmThreshold(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "1"); this.save(alarmRecords); } catch (Exception e) { e.printStackTrace(); @@ -846,8 +869,8 @@ * @param cell */ @Override - public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent,String logTime) { - this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent,DateUtil.parse(logTime)); + public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent, String logTime) { + this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent, DateUtil.parse(logTime)); } @Override @@ -903,7 +926,10 @@ offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), - offDeviceDTO.getPlace(), "1"); + ObjectUtil.isNotEmpty(offDeviceDTO.getLedgerName()) ? + offDeviceDTO.getTagNumber().concat("|"). + concat(offDeviceDTO.getLedgerName()) : + offDeviceDTO.getPlace(), "1"); alarmRecordsList.add(alarmRecords); ledgers.add(offDeviceDTO); } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java new file mode 100644 index 0000000..cb554b9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.data.dto; + + +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class PanDataDTO implements Serializable { + + private static final long serialVersionUID = 1232822221212L; + + private String dataTime; + + private String attributeType; + + private String dataValue; + + private String deviceCode; + + + +} 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 index a082d00..2a943ad 100644 --- 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 @@ -23,6 +23,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -37,6 +38,7 @@ * @author zt * @since 2025-01-22 */ +@Slf4j @RequiredArgsConstructor @Service public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { @@ -71,8 +73,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -80,8 +81,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}",devCode, e); } } @@ -141,8 +141,7 @@ } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -222,8 +221,10 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); +// e.printStackTrace(); +// log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); + } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java index dd80611..cd24860 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java @@ -83,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -124,8 +123,7 @@ busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -200,8 +198,7 @@ alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } //低电量报警处理 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 302b446..f0def39 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 @@ -76,8 +76,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -85,8 +84,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -133,8 +131,7 @@ if (i < jsonArray.size() - 1) continue; busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -217,8 +214,7 @@ } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } 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 e5ba8f7..a02af88 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataMonitorPipeOtherServiceImpl extends ServiceImpl implements IDataMonitorPipeOtherService, IDataAbstractService { @@ -73,8 +75,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -116,8 +116,7 @@ //2.写入新的报警 alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + log.error("处理报警时发生异常,devcode:{},e:{}", devCode, e); } } } @@ -160,8 +159,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmEventCode)); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -341,8 +339,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag || ObjectUtil.isNotEmpty(alarmContent) ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java index 5dc8c2b..f383690 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java @@ -2,7 +2,6 @@ import cn.hutool.core.date.DateUtil; 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; @@ -13,15 +12,20 @@ import com.casic.missiles.modular.alarm.service.IAlarmRuleService; import com.casic.missiles.modular.data.dao.DataGasMapper; import com.casic.missiles.modular.data.dao.DataPanGasMapper; +import com.casic.missiles.modular.data.dto.PanDataDTO; import com.casic.missiles.modular.data.entity.DataPanGas; import com.casic.missiles.modular.data.service.IDataPanGasService; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.CommonUtil; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonToken; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.io.IOException; import java.util.Date; import java.util.List; import java.util.Map; @@ -68,78 +72,179 @@ } - @Transactional @Override public boolean processAcceptGasData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); - JSONArray jsonArray = jsonObject.getJSONArray("data"); - String devCode = ""; - for (int i = 0; i < jsonArray.size(); i++) { - try { - devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); - if (ObjectUtil.isEmpty(devCode)) continue; - List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); - String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); - String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); - //暂只存浓度 - if ("2".equals(attributeType)) continue; - String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); - gas = String.format("%.2f", Double.valueOf(gas)); - //1.存数据 - save(DataPanGas.builder() - .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") - .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") - .deviceCode(devCode) - .concentration(gas) - .logtime(DateUtil.parseDateTime(dataTime)) - .build());//存储采集数据 - //2.有无超限处理流程(判断最后一条数据) -// if (i < jsonArray.size() - 1) continue; - - //3.清除设备告警 - alarmRecordsService.cancelDeviceAlarm(devCode); - //4.存报警 - //若没绑场站,则不产生报警 - boolean alarmFlag = false; - String bfcf = busDeviceService.getBfcf(devCode); - 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))) { - dataTime = dataTime.replaceAll("-", ""); - dataTime = dataTime.replaceAll(":", ""); - dataTime = dataTime.replaceAll("\\s+", ""); - alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); - } - break; - } - } - } - //5.清数据报警 - if (!alarmFlag) { - alarmRecordsService.cancelDataAlarm(devCode); - } - //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); - //7.更新监测井状态 (1:正常,2:报警) - if (busWellDTOList != null && busWellDTOList.size() > 0) { - alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); - } - } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + JsonFactory factory = new JsonFactory(); + try (JsonParser parser = factory.createParser(jsonObject.getString("data"))) { + // 定位到 "data" 数组 + while (parser.nextToken() != JsonToken.START_ARRAY) { + parser.nextToken(); } + // 逐条处理数据 + while (parser.nextToken() != JsonToken.END_ARRAY) { + if (parser.getCurrentToken() == JsonToken.START_OBJECT) { + processSingleData(parseJsonObject(parser)); + } + + } + } catch (IOException e) { + e.printStackTrace(); } + return true; } + private PanDataDTO parseJsonObject(JsonParser parser) throws IOException { + PanDataDTO panDataDTO = new PanDataDTO(); + while (parser.nextToken() != JsonToken.END_OBJECT) { + String fieldName = parser.getCurrentName(); + if ("dataTime".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataTime(parser.getText()); + } else if ("attributeType".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setAttributeType(parser.getText()); + } else if ("dataValue".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataValue(parser.getText()); + } else if ("deviceCode".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDeviceCode(parser.getText()); + } + } + return panDataDTO; + } + + + private void processSingleData(PanDataDTO panDataDTO) { + try { + String devCode = panDataDTO.getDeviceCode(); + if (ObjectUtil.isEmpty(devCode)) return; + List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); + String gas = panDataDTO.getDataValue(); + String attributeType = panDataDTO.getAttributeType(); + //暂只存浓度 + if ("2".equals(attributeType)) return; + String dataTime = panDataDTO.getDataTime(); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataPanGas.builder() + .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .deviceCode(devCode) + .concentration(gas) + .logtime(DateUtil.parseDateTime(dataTime)) + .build());//存储采集数据 + + boolean alarmFlag = false; + String bfcf = busDeviceService.getBfcf(devCode); + 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))) { +// dataTime = dataTime.replaceAll("-", ""); +// dataTime = dataTime.replaceAll(":", ""); +// dataTime = dataTime.replaceAll("\\s+", ""); + alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); + //7.更新监测井状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + log.error("处理云台数据时发生异常,devcode:{},data:{},e:{}", panDataDTO.getDeviceCode(), panDataDTO.toString(), e); + } + } + + +// @Transactional +// @Override +// public boolean processAcceptGasData(Map dataParams) { +// JSONObject jsonObject = new JSONObject(dataParams); +// JSONArray jsonArray = jsonObject.getJSONArray("data"); +// String devCode = ""; +// for (int i = 0; i < jsonArray.size(); i++) { +// try { +// devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); +// if (ObjectUtil.isEmpty(devCode)) continue; +// List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); +// String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); +// String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); +// //暂只存浓度 +// if ("2".equals(attributeType)) continue; +// String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); +// gas = String.format("%.2f", Double.valueOf(gas)); +// //1.存数据 +// save(DataPanGas.builder() +// .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") +// .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") +// .deviceCode(devCode) +// .concentration(gas) +// .logtime(DateUtil.parseDateTime(dataTime)) +// .build());//存储采集数据 +// //2.有无超限处理流程(判断最后一条数据) +//// if (i < jsonArray.size() - 1) continue; +// +// //3.清除设备告警 +//// alarmRecordsService.cancelDeviceAlarm(devCode); +// //4.存报警 +// //若没绑场站,则不产生报警 +// boolean alarmFlag = false; +// String bfcf = busDeviceService.getBfcf(devCode); +// 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))) { +//// dataTime = dataTime.replaceAll("-", ""); +//// dataTime = dataTime.replaceAll(":", ""); +//// dataTime = dataTime.replaceAll("\\s+", ""); +// alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); +// } +// break; +// } +// } +// } +// //5.清数据报警 +// if (!alarmFlag) { +// alarmRecordsService.cancelDataAlarm(devCode); +// } +// //6.更新电量及状态 (1:正常,2:报警) +// alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); +// //7.更新监测井状态 (1:正常,2:报警) +// if (busWellDTOList != null && busWellDTOList.size() > 0) { +// alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); +// } +// } catch (Exception e) { +// log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); +// } +// } +// return true; +// } + @Override public boolean acceptAlarmData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); 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 37d731d..a17953b 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataTubeOtherServiceImpl extends ServiceImpl implements IDataTubeOtherService, IDataAbstractService { @@ -73,7 +75,7 @@ } } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,7 +84,7 @@ imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -122,8 +124,8 @@ } //特殊处理消警 if ("CancelWaterImmersionAlarm".equals(alarmType)) { - if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { - alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + if (alarmRecordsService.isWatchAlarms(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelWatchAlarms(devCode, "WaterImmersionAlarm"); } continue; } @@ -146,8 +148,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmType)); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -227,8 +228,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java new file mode 100644 index 0000000..3be65dd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java @@ -0,0 +1,170 @@ +package com.casic.missiles.modular.aop; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.aop.annotion.ReflectionUtils; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.modular.interfaces.log.LogManager; +import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.Serializable; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Aspect +@Component +public class OperateLogAspect { + private Logger log = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private ApplicationContext applicationContext; + + public static volatile Map oldMap = new HashMap<>(); + + public OperateLogAspect() { + } + + @Pointcut("@annotation(com.casic.missiles.modular.aop.annotion.OperateLog)") + public void cutService() { + } + + @Around("cutService()") + public Object recordSysLog(ProceedingJoinPoint point) throws Throwable { + Object result = point.proceed(); + + try { + this.handle(point); + } catch (Exception var4) { + this.log.error("日志记录出错!", var4); + } + + return result; + } + + /** + * 处理请求前执行 + */ + @Before(value = "@annotation(operateLog)") + public void boBefore(JoinPoint joinPoint, OperateLog operateLog) { + Object info = joinPoint.getArgs()[0]; + if ("edit".equals(operateLog.type()) && operateLog.needDefaultCompare()) { + Class cls = operateLog.serviceClass(); + IService service = (IService) applicationContext.getBean(cls); + Object result; + if (service instanceof IBusDeviceService) { + result = ((IBusDeviceService) service).getByDeviceId((Long) ReflectionUtils.getFieldValue(info, "id")); + } else + result = service.getById((Serializable) ReflectionUtils.getFieldValue(info, "id")); + oldMap = (Map) objectToMap(result); // 存储修改前的对象 + } + } + + private void handle(ProceedingJoinPoint point) throws Exception { + Signature sig = point.getSignature(); + MethodSignature msig = null; + if (!(sig instanceof MethodSignature)) { + throw new IllegalArgumentException("该注解只能用于方法"); + } else { + msig = (MethodSignature) sig; + Object target = point.getTarget(); + Method currentMethod = target.getClass().getMethod(msig.getName(), msig.getParameterTypes()); + String methodName = currentMethod.getName(); + AuthUser user = ShiroKit.getUser(); + if (null != user) { + String className = point.getTarget().getClass().getName(); + Object[] params = point.getArgs(); + OperateLog annotation = (OperateLog) currentMethod.getAnnotation(OperateLog.class); + String bussinessName = annotation.value(); + String key = annotation.key(); + Class dictClass = annotation.dict(); + String sb = argsArrayToString(params); + String msg = sb; + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + if ("add".equals(annotation.type())) { + Map parameters = (Map) objectToMap(params[0]); + msg = CollectionUtils.isEmpty(parameters) ? sb : ReflectionUtils.parseMutiKey(dictMap, key, parameters); + } else if ("edit".equals(annotation.type())) { + msg = CollectionUtils.isEmpty(oldMap) ? sb : ReflectionUtils.contrastObj(dictClass, key, params[0], oldMap); + }else if("delete".equals(annotation.type())){ + msg=dictMap.get(annotation.key())+":"+ReflectionUtils.getDeleteKeys(params[0]); + } + LogManager.me().executeLog(LogTaskFactory.bussinessLog(user.getId(), bussinessName, className, methodName, msg)); + } + } + } + + + /** + * 参数拼装 + */ + private String argsArrayToString(Object[] paramsArray) { + Gson gson = new GsonBuilder().create(); + String params = ""; + if (paramsArray != null && paramsArray.length > 0) { + for (int i = 0; i < paramsArray.length; i++) { + if (!isFilterObject(paramsArray[i])) { + params += gson.toJson(paramsArray[i]) + " & "; + } + } + } + return params.trim(); + } + + + /** + * 判断是否需要过滤的对象。 + * + * @param o 对象信息。 + * @return 如果是需要过滤的对象,则返回true;否则返回false。 + */ + public boolean isFilterObject(final Object o) { + return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse; + } + + private Map objectToMap(Object obj) { + if (obj == null) { + return null; + } + ObjectMapper mapper = new ObjectMapper(); + mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + // 如果使用JPA请自己打开这条配置 + // mapper.addMixIn(Object.class, IgnoreHibernatePropertiesInJackson.class); + Map mappedObject = mapper.convertValue(obj, Map.class); + return mappedObject; + + + } +} + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java new file mode 100644 index 0000000..77afa9c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.aop.annotion; + +import java.lang.annotation.*; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.FIELD}) +@Documented +public @interface DataName { + String name() default ""; // 字段名称 + + /** + * 读取枚举内容转义表达式 (如: 0=男,1=女,2=未知) + */ + String readConverterExp() default ""; +} + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java new file mode 100644 index 0000000..f1f59ad --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.aop.annotion; + + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.common.constant.dictmap.base.SystemDict; + +import java.lang.annotation.*; + +@Inherited +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.METHOD}) +public @interface OperateLog { + String value() default ""; + + String key() default "id"; + + Class serviceClass() default IService.class; + + // 是否需要比较新旧数据 + boolean needDefaultCompare() default true; + + //操作类型 add update delete + String type() default "update"; + + Class dict() default SystemDict.class; +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java new file mode 100644 index 0000000..eb773ad --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java @@ -0,0 +1,328 @@ +package com.casic.missiles.modular.aop.annotion; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.modular.interfaces.dictmap.factory.DictFieldWrapperFactory; +import lombok.extern.slf4j.Slf4j; + +import java.beans.PropertyDescriptor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.*; + +import static com.casic.missiles.modular.interfaces.utils.Contrast.firstCharToLowerCase; +import static com.casic.missiles.modular.interfaces.utils.Contrast.firstCharToUpperCase; + +@Slf4j +public class ReflectionUtils { + + /** + * 直接读取对象属性值, 无视private/protected修饰符, 不经过getter函数. + * + * @param obj 读取的对象 + * @param fieldName 读取的列 + * @return 属性值 + */ + public static Object getFieldValue(final Object obj, final String fieldName) { + Field field = getAccessibleField(obj, fieldName); + if (field == null) { + throw new IllegalArgumentException("Could not find field [" + fieldName + "] on target [" + obj + "]"); + } + + Object result = null; + try { + result = field.get(obj); + } catch (IllegalAccessException e) { + log.error("不可能抛出的异常{}", e.getMessage()); + e.printStackTrace(); + } + return result; + } + + /** + * 循环向上转型, 获取对象的DeclaredField, 并强制设置为可访问.如向上转型到Object仍无法找到, 返回null. + * + * @param obj 查找的对象 + * @param fieldName 列名 + * @return 列 + */ + public static Field getAccessibleField(final Object obj, final String fieldName) { + for (Class superClass = obj.getClass(); superClass != Object.class; superClass = superClass.getSuperclass()) { + try { + Field field = superClass.getDeclaredField(fieldName); + makeAccessible(field); + return field; + } catch (NoSuchFieldException e) { // NOSONAR + // Field不在当前类定义,继续向上转型 + e.printStackTrace(); + continue; // new add + } + } + return null; + } + + /** + * 改变private/protected的成员变量为public,尽量不调用实际改动的语句,避免JDK的SecurityManager抱怨。 + * + * @param + */ + public static void makeAccessible(Field field) { + if ((!Modifier.isPublic(field.getModifiers()) || !Modifier.isPublic(field.getDeclaringClass().getModifiers()) || Modifier + .isFinal(field.getModifiers())) && !field.isAccessible()) { + field.setAccessible(true); + } + } + + /** + * 获取两个对象同名属性内容不相同的列表 + * + * @param class1 old对象 + * @param class2 new对象 + * @return 区别列表 + * @throws ClassNotFoundException 异常 + * @throws IllegalAccessException 异常 + */ + public static List> compareTwoClass(Object class1, Object class2) throws ClassNotFoundException, IllegalAccessException { + List> list = new ArrayList>(); + // 获取对象的class + Class clazz1 = class1.getClass(); + Class clazz2 = class2.getClass(); + // 获取对象的属性列表 + Field[] field1 = clazz1.getDeclaredFields(); + Field[] field2 = clazz2.getDeclaredFields(); + StringBuilder sb = new StringBuilder(); + // 遍历属性列表field1 + for (int i = 0; i < field1.length; i++) { + // 遍历属性列表field2 + for (int j = 0; j < field2.length; j++) { + // 如果field1[i]属性名与field2[j]属性名内容相同 + if (field1[i].getName().equals(field2[j].getName())) { + if (field1[i].getName().equals(field2[j].getName())) { + field1[i].setAccessible(true); + field2[j].setAccessible(true); + // 如果field1[i]属性值与field2[j]属性值内容不相同 + if (!compareTwo(field1[i].get(class1), field2[j].get(class2))) { + Map map2 = new HashMap(); + DataName name = field1[i].getAnnotation(DataName.class); + String fieldName = ""; + if (name != null) { + fieldName = name.name(); + } else { + fieldName = field1[i].getName(); + } + map2.put("name", fieldName); + map2.put("old", field1[i].get(class1)); + map2.put("new", field2[j].get(class2)); + list.add(map2); + } + break; + } + } + } + } + return list; + } + + /** + * 对比两个数据是否内容相同 + * + * @param object1 比较对象1 + * @param object2 比较对象2 + * @return boolean类型 + */ + public static boolean compareTwo(Object object1, Object object2) { + if (object1 == null && object2 == null) { + return true; + } + if (object1 == null && object2 != null) { + return false; + } + if (object1.equals(object2)) { + return true; + } + return false; + } + + public static String contrastObjByName(Class dictClass, String key, Object pojo1, Map pojo2) throws IllegalAccessException, InstantiationException { + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + String str = parseMutiKey(dictMap, key, pojo2) + ";;;"; + + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if (!"serialVersionUID".equals(field.getName())) { + String prefix = "get"; + int prefixLength = 3; + if (field.getType().getName().equals("java.lang.Boolean")) { + prefix = "is"; + prefixLength = 2; + } + + Method getMethod = null; + + try { + getMethod = clazz.getDeclaredMethod(prefix + firstCharToUpperCase(field.getName())); + } catch (NoSuchMethodException var22) { + System.err.println("this className:" + clazz.getName() + " is not methodName: " + var22.getMessage()); + continue; + } + + Object o1 = getMethod.invoke(pojo1); + Object o2 = pojo2.get(firstCharToLowerCase(getMethod.getName().substring(prefixLength))); + if (o1 != null && o2 != null) { + if (o1 instanceof Date) { + o1 = DateUtil.format(new Date(), "yyyy-MM-dd"); + } else if (o1 instanceof Integer) { + o2 = Integer.parseInt(o2.toString()); + } + + if (!o1.toString().equals(o2.toString())) { + if (i != 1) { + str = str + ";;;"; + } + + String fieldName = dictMap.get(field.getName()); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(field.getName()); + if (fieldWarpperMethodName != null) { + Object o1Warpper = DictFieldWrapperFactory.createFieldWrapper(o1, fieldWarpperMethodName); + Object o2Warpper = DictFieldWrapperFactory.createFieldWrapper(o2, fieldWarpperMethodName); + str = str + "字段名称:" + fieldName + ",旧值:" + o1Warpper + ",新值:" + o2Warpper; + } else { + str = str + "字段名称:" + fieldName + ",旧值:" + o1 + ",新值:" + o2; + } + + ++i; + } + } + } + } + } catch (Exception var23) { + var23.printStackTrace(); + } + + return str; + } + + public static String parseMutiKey(AbstractDictMap dictMap, String key, Map requests) { + StringBuilder sb = new StringBuilder(); + if (key.indexOf(",") != -1) { + String[] keys = key.split(","); + String[] var13 = keys; + int var14 = keys.length; + + for (int var7 = 0; var7 < var14; ++var7) { + String item = var13[var7].trim(); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(item); + Object value = requests.get(item); + if (fieldWarpperMethodName != null) { + Object valueWarpper = DictFieldWrapperFactory.createFieldWrapper(value, fieldWarpperMethodName); + sb.append(dictMap.get(item) + "=" + valueWarpper + ","); + } else { + sb.append(dictMap.get(item) + "=" + (ObjectUtil.isNotEmpty(value) ? value.toString() : "") + ","); + } + } + + return StrUtil.removeSuffix(sb.toString(), ","); + } else { + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(key); + Object value = requests.get(key); + if (fieldWarpperMethodName != null) { + Object valueWarpper = DictFieldWrapperFactory.createFieldWrapper(value, fieldWarpperMethodName); + sb.append(dictMap.get(key) + "=" + valueWarpper); + } else { + sb.append(dictMap.get(key) + "=" + (ObjectUtil.isNotEmpty(value) ? value.toString() : "")); + } + + return sb.toString(); + } + } + + public static String getDeleteKeys(Object pojo1) { + String str = ""; + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if ("keys".equals(field.getName())) { + PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); + Method getMethod = pd.getReadMethod(); + Object o1 = getMethod.invoke(pojo1); + return ObjectUtil.isNotEmpty(o1) ? o1.toString().replaceAll("\\[|]", "") : "".concat(",已删除"); + } + } + + } catch (Exception var21) { + var21.printStackTrace(); + } + return str; + } + + public static String contrastObj(Class dictClass, String key, Object pojo1, Map pojo2) throws IllegalAccessException, InstantiationException { + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); +// String str = parseMutiKey(dictMap, key, pojo2) + ";;;"; + String str = ""; + + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if (!"serialVersionUID".equals(field.getName())) { + PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); + Method getMethod = pd.getReadMethod(); + Object o1 = getMethod.invoke(pojo1); + Object o2 = pojo2.get(firstCharToLowerCase(getMethod.getName().substring(3))); + if (o1 != null && o2 != null) { + if (o1 instanceof Integer) { + o2 = Integer.parseInt(o2.toString()); + } else if (o1 instanceof Date) { + o1 = DateUtil.format((Date) o1, "yyyy-MM-dd HH:mm:ss"); + } + + if (!o1.toString().equals(o2.toString())) { + if (i != 1) { + str = str + ";"; + } + + String fieldName = dictMap.get(field.getName()); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(field.getName()); + if (fieldWarpperMethodName != null) { + Object o1Warpper = DictFieldWrapperFactory.createFieldWrapper(o1, fieldWarpperMethodName); + Object o2Warpper = DictFieldWrapperFactory.createFieldWrapper(o2, fieldWarpperMethodName); + str = str + fieldName + ":将【" + o1Warpper + "】,改为【" + o2Warpper + "】"; + } else { + str = str + fieldName + ":将【" + o1 + "】,改为【" + o2 + "】"; + } + + ++i; + } + } + } + } + } catch (Exception var21) { + var21.printStackTrace(); + } + + return str; + } + + +} \ No newline at end of file diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java index 7497ebf..18fd820 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java @@ -8,12 +8,14 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.StateDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.DeviceTypeDict; import com.casic.missiles.modular.device.dto.BaseDeviceTypeDTO; import com.casic.missiles.modular.device.dto.BaseDeviceTypeIdsDTO; import com.casic.missiles.modular.device.dto.SelectDTO; @@ -63,6 +65,7 @@ return ReturnUtil.success(super.packForBT(baseDeviceTypePage)); } + @OperateLog(value = "新增设备类型", key = "typeName,watchObject,isUsed,typeDescription", dict = DeviceTypeDict.class, type = "add") @ApiOperation("增加设备类型") @PostMapping("/add") @ResponseBody @@ -71,6 +74,7 @@ return ReturnUtil.success(iBaseDeviceTypeService.saveBaseDeviceType(baseDeviceType)); } + @OperateLog(value = "编辑设备类型", dict = DeviceTypeDict.class, serviceClass = IBaseDeviceTypeService.class, type = "edit") @ApiOperation("编辑设备类型") @PostMapping("/edit") @ResponseBody @@ -81,10 +85,11 @@ return ReturnUtil.success(iBaseDeviceTypeService.updateById(baseDeviceType)); } + @OperateLog(value = "删除设备类型", key = "typeName", dict = DeviceTypeDict.class, serviceClass = IBaseDeviceTypeService.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); @@ -113,7 +118,7 @@ public ReturnDTO selectList(@RequestBody BaseDeviceTypeIdsDTO request) { QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.in(request.getDeviceTypeList()!=null&&request.getDeviceTypeList().size()>0, "id", request.getDeviceTypeList()); + queryWrapper.in(request.getDeviceTypeList() != null && request.getDeviceTypeList().size() > 0, "id", request.getDeviceTypeList()); queryWrapper.eq("IS_USED", "1"); List baseDeviceTypes = iBaseDeviceTypeService.list(queryWrapper); List selectDTOS = new ArrayList<>(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java index 42d752d..54944e2 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java @@ -3,14 +3,15 @@ import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.IdDTO; -import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.ProductDict; import com.casic.missiles.modular.device.dto.BaseProductDTO; import com.casic.missiles.modular.device.dto.SelectProductDTO; import com.casic.missiles.modular.device.entity.BaseProduct; @@ -21,7 +22,6 @@ import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; -import java.util.List; import java.util.Objects; /** @@ -49,6 +49,7 @@ return ReturnUtil.success(super.packForBT(iBaseProductService.pageList(page, requestDTO))); } + @OperateLog(value = "新增产品", key = "productName,deviceType,deviceModel,manufacturerId,protocol,accessMethod,powerSupplyMode,dataService", dict = ProductDict.class, type = "add") @ApiOperation("新增") @PostMapping("/add") @ResponseBody @@ -58,6 +59,7 @@ } + @OperateLog(value = "编辑产品", dict = ProductDict.class, serviceClass = IBaseProductService.class, type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -68,10 +70,11 @@ return ReturnUtil.success(iBaseProductService.updateBaseProductById(baseProduct)); } + @OperateLog(value = "删除产品", key = "productName", dict = ProductDict.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 509bd7b..103acf2 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 @@ -9,6 +9,7 @@ import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; @@ -17,6 +18,7 @@ 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.aop.annotion.OperateLog; import com.casic.missiles.modular.device.dict.BusConfigDict; import com.casic.missiles.modular.device.dict.DeviceDict; import com.casic.missiles.modular.device.dto.*; @@ -65,7 +67,8 @@ } - @BussinessLog(value = "新增设备", key = "devcode,deviceName,deviceType,installDate,productId", dict = DeviceDict.class) + @OperateLog(value = "新增设备", key = "devcode,deviceType,productId," + + "valid,communicationType,simId,warrantyPeriod,tagNumber,leftLength,rightLength,", dict = DeviceDict.class,type = "add") @CacheEvict(value="busLedgersCache", key="#busDevice.getDevcode()") @ApiOperation("新增") @PostMapping("/add") @@ -75,7 +78,8 @@ } - @BussinessLog(value = "编辑设备", key = "devcode,deviceName,deviceType,installDate,productId", dict = DeviceDict.class) + @OperateLog(value = "编辑设备", key = "devcode,deviceType,installDate,productId," + + "leftLength,rightLength,communicationType,simId,warrantyPeriod", dict = DeviceDict.class,serviceClass = IBusDeviceService.class,type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -86,11 +90,12 @@ return ReturnUtil.success(iBusDeviceService.updateBusDevice(busDevice)); } + @OperateLog(value = "删除设备", key = "devcode", dict = DeviceDict.class,serviceClass = IBusDeviceService.class,type = "delete") @CacheEvict(value="busLedgersCache", allEntries = true) @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 31de56e..6f35acd 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 @@ -4,8 +4,8 @@ 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.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.page.PageFactory; @@ -16,11 +16,8 @@ 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.BusDeviceDTO; -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.BusDevice; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.CommonUtil; @@ -53,6 +50,7 @@ private final IBusLedgerPipeService iBusLedgerPipeService; private final IBaseExportService iBaseExportService; + private final AbstractDictService abstractDictService; @ApiOperation("新建点位") @PostMapping("/addPosition") @@ -60,10 +58,10 @@ 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,"安装位号已存!!!"); + if (busLedgerPipeList != null && busLedgerPipeList.size() > 0) { + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE, "安装位号已存!!!"); } - Long id =IdUtil.getSnowflake(1,2).nextId(); + Long id = IdUtil.getSnowflake(1, 2).nextId(); busLedgerPipe.setId(id); busLedgerPipe.setLedgerCode(busLedgerPipe.getTagNumber()); busLedgerPipe.setArea(CommonUtil.getAreaCode(busLedgerPipe.getPosition())); @@ -139,7 +137,11 @@ page.setCurrent(1); page.setSize(Integer.MAX_VALUE); Page devicePage = iBusLedgerPipeService.listPage(page, busLedgerPipeRequestDTO); + List records = devicePage.getRecords(); try { + for (BusLedgerPipe busLedgerPipe : records) { + busLedgerPipe.setLocationCategory(abstractDictService.getDictNameByCode("locationType", busLedgerPipe.getLocationCategory())); + } iBaseExportService.exportExcel(response, BusLedgerPipe.class, devicePage.getRecords(), ExportEnum.LEDGER_PIPE_EXPORT.getSheetName()); } catch (Exception e) { e.printStackTrace(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java index e87f3f8..8040c74 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java @@ -7,10 +7,13 @@ 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.DeletesDTO; import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.ProtocolDict; import com.casic.missiles.modular.device.dto.BusProtocolDTO; import com.casic.missiles.modular.device.entity.BusProtocol; import com.casic.missiles.modular.device.service.IBusProtocolService; @@ -35,10 +38,10 @@ @RestController @RequestMapping("/system/busProtocol") public class BusProtocolController extends ExportController { - + private final IBusProtocolService protocolService; - + @ApiOperation("查询分页接口") @PostMapping("/listPage") @ResponseBody @@ -47,9 +50,10 @@ queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getProtocolName()), "PROTOCOL_NAME", requestDTO.getProtocolName()); queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getProtocolCode()), "PROTOCOL_CODE", requestDTO.getProtocolCode()); Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(protocolService.page(page,queryWrapper))); + return ReturnUtil.success(super.packForBT(protocolService.page(page, queryWrapper))); } + @OperateLog(value = "新增协议", key = "protocolName,protocolCode,version,ip,description", dict = ProtocolDict.class, type = "add") @ApiOperation("新增") @PostMapping("/add") @ResponseBody @@ -58,6 +62,7 @@ return ReturnUtil.success(protocolService.save(busProtocol)); } + @OperateLog(value = "编辑协议", dict = ProtocolDict.class, serviceClass = IBusProtocolService.class, type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -68,10 +73,11 @@ return ReturnUtil.success(protocolService.updateById(busProtocol)); } + @OperateLog(value = "删除协议", key = "protocolName", dict = ProtocolDict.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 23ddee9..24c4712 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 @@ -2,7 +2,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.entity.BusDevice; import com.casic.missiles.util.InConditionDriver; @@ -46,27 +45,27 @@ @Param("orderColumn") String orderColumn, @Param("request") CommonRequestDTO request); - @Select("SELECT BFZT from bus_device where VALID=1 and DEVCODE= #{devcode} limit 1" ) - String getBfcf( @Param("devcode") String devcode); + @Select("SELECT BFZT from bus_device where VALID=1 and DEVCODE= #{devcode} limit 1") + String getBfcf(@Param("devcode") String devcode); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getMethaneData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getMethaneData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_tube_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getTubeOtherData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_tube_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getTubeOtherData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gasliquid_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getLGData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gasliquid_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getLGData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_monitor_pipe_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getMonitorPipeOtherData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_monitor_pipe_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getMonitorPipeOtherData(@Param("devcodes") List devcodes); - @Select("SELECT ALARM_THRESHOLD FROM `alarm_rule_device` where DEVCODE = #{devcode} order by ALARM_THRESHOLD asc " ) + @Select("SELECT ALARM_THRESHOLD FROM `alarm_rule_device` where DEVCODE = #{devcode} order by ALARM_THRESHOLD asc ") List getSpecialDeviceRule(@Param("devcode") String devcode); @Select(" select ar.ALARM_THRESHOLD from alarm_rule ar where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + @@ -81,4 +80,7 @@ "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") List getListByWellId(@Param("wellId") Long wellId); + + BusDeviceOperateLogDTO getByDeviceId(@Param("id") Long id); + } 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 8ba4b15..3109344 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 @@ -44,7 +44,7 @@ LEFT JOIN base_product bp ON bd.PRODUCT_ID = bp.ID LEFT JOIN bus_device_ledger br on br.DEVICE_ID = bd.ID AND br.VALID='1' LEFT JOIN bus_manufacturer bm on bm.ID = bp.MANUFACTURER_ID - LEFT JOIN bus_ledger_all_view bl on bl.ID = br.LEDGER_ID AND br.VALID='1' and bl.type = br.type + LEFT JOIN bus_ledger_all_view bl on bl.ID = br.LEDGER_ID AND bl.VALID='1' and bl.type = br.type where bd.valid>0 @@ -95,6 +95,32 @@ + + + SELECT - rd.*, - at.alarm_type, - bt.TYPE_NAME as devTypeName - FROM - alarm_records rd - LEFT JOIN bus_ledger_all_view lr ON lr.ledgerCode = rd.LEDGER_CODE - LEFT JOIN alarm_type at ON at.ID = rd.ALARM_TYPE_ID - LEFT JOIN bus_device bd ON bd.DEVCODE = rd.DEVCODE and bd.valid >0 - LEFT JOIN base_device_type bt ON bt.id = bd.DEVICE_TYPE + rd.*, + AT.alarm_type, + bt.TYPE_NAME AS devTypeName + FROM + alarm_records rd + LEFT JOIN bus_device bd ON bd.DEVCODE = rd.DEVCODE + AND bd.valid > 0 + LEFT JOIN bus_device_ledger bl ON bd.ID = bl.DEVICE_ID + AND bl.VALID = '1' + 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' + AND lr.ledgerCode = rd.LEDGER_CODE + LEFT JOIN alarm_type AT ON AT.ID = rd.ALARM_TYPE_ID + LEFT JOIN base_device_type bt ON bt.id = bd.DEVICE_TYPE where rd.STATUS ='1' and rd.EXCEPTION_TYPE='0' @@ -695,6 +705,7 @@ dt.LOGTIME, bv.tagNumber, bv.ledgerCode, + bv.ledgerName, bdt.TYPE_NAME, bv.place, bv.type, @@ -720,6 +731,7 @@ t.tagNumber, t.ledgerCode, t.TYPE_NAME, + t.ledgerName, t.OFF_DAYS, t.LOGTIME, t.place, diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml index 7aff0f0..a63dac1 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml @@ -25,34 +25,55 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java index 3e0edd6..9dab3a7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java @@ -71,4 +71,18 @@ private Long deptid; + @ApiModelProperty("经度") + private String lngGaode; + + @ApiModelProperty("纬度") + private String latGaode; + + @ApiModelProperty("监测类型") + private String watchObject; + + @ApiModelProperty("点位id") + private Long ledgerId; + + + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java index e938da8..60464c4 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java @@ -12,6 +12,7 @@ private String deviceType; private String tagNumber; private String ledgerCode; + private String ledgerName; private String place; //台账类型 private String type; 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 ac4cabe..e623df7 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 @@ -44,6 +44,7 @@ import static cn.hutool.core.date.DateUnit.DAY; import static com.casic.missiles.util.TimeConvertUtil.TimeConverter; +import static com.casic.missiles.util.TimeConvertUtil.TimeConverterSecond; /** *

@@ -180,8 +181,8 @@ public DeviceAlarmDetailDTO deviceAlarmDetail(Long id) { DeviceAlarmDetailDTO alarmDetail = this.baseMapper.deviceAlarmDetail(id); - alarmDetail.setCancelDuration(TimeConverter(alarmDetail.getCancelDuration())); - alarmDetail.setProcessDuration(TimeConverter(alarmDetail.getProcessDuration())); + alarmDetail.setCancelDuration(TimeConverterSecond(alarmDetail.getCancelDuration())); + alarmDetail.setProcessDuration(TimeConverterSecond(alarmDetail.getProcessDuration())); alarmDetail.setDeptName(ObjectUtil.isNotEmpty(alarmDetail.getDeptid()) ? commonServer.getDeptNamesByDeptId(alarmDetail.getDeptid()) : ""); // alarmDetail.setAddress(alarmDetail.getTagNumber().concat("|").concat(alarmDetail.getLedgerName())); alarmDetail.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmDetail.getAlarmCategory())); @@ -524,16 +525,26 @@ @Override public void cancelDeviceAlarm(String devCode) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("DEVCODE", devCode); - updateWrapper.eq("EXCEPTION_TYPE", "1"); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE", devCode); + queryWrapper.eq("EXCEPTION_TYPE", "1"); //只有挂起和已处置的才消 // updateWrapper.ge("PROCESS_STATUS", "3"); - updateWrapper.eq("STATUS", "1"); - updateWrapper.set("STATUS", "0"); - updateWrapper.set("CANCEL_TIME", new Date()); - this.update(updateWrapper); - //toDo:需要加流程取消日志 + queryWrapper.eq("STATUS", "1"); + List alarmRecordsList = this.list(queryWrapper); + if (alarmRecordsList != null && alarmRecordsList.size() > 0) { + alarmRecordsList.forEach(alarmRecords -> { + alarmRecords.setStatus("0"); + alarmRecords.setCancelTime(new Date()); + alarmRecords.setPreProcessStatus(alarmRecords.getProcessStatus()); + alarmRecords.setProcessStatus(ApprovalStatusEnum.FINISHED.getCode()); + this.updateById(alarmRecords); + }); + //添加流程日志 + approvalLogMapper.insert(new ApprovalLog(alarmRecordsList.get(0).getId(), "1", + "", ApprovalStatusEnum.FINISHED.getCode(), + null)); + } } @Override @@ -674,8 +685,12 @@ AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), data.concat("%LEL"), data, - alarmRuleResponseDTO.getAlarmLevelId(),DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmLevelId(), DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmRuleResponseDTO.getAlarmTypeName(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -721,7 +736,7 @@ @Override - public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime,List busWellDTOList, + public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime, List busWellDTOList, Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { @@ -730,8 +745,12 @@ try { AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, - alarmLevelId, DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmLevelId, DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmTypeName, + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace() + , "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -793,7 +812,11 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.get().getAlarmTypeId(), alarmRuleResponseDTO.get().getAlarmTypeName(), alarmRuleResponseDTO.get().getAlarmLevelId(), DateUtil.parse(logTime), - alarmRuleResponseDTO.get().getAlarmThreshold(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "1"); + alarmRuleResponseDTO.get().getAlarmThreshold(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "1"); this.save(alarmRecords); } catch (Exception e) { e.printStackTrace(); @@ -846,8 +869,8 @@ * @param cell */ @Override - public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent,String logTime) { - this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent,DateUtil.parse(logTime)); + public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent, String logTime) { + this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent, DateUtil.parse(logTime)); } @Override @@ -903,7 +926,10 @@ offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), - offDeviceDTO.getPlace(), "1"); + ObjectUtil.isNotEmpty(offDeviceDTO.getLedgerName()) ? + offDeviceDTO.getTagNumber().concat("|"). + concat(offDeviceDTO.getLedgerName()) : + offDeviceDTO.getPlace(), "1"); alarmRecordsList.add(alarmRecords); ledgers.add(offDeviceDTO); } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java new file mode 100644 index 0000000..cb554b9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.data.dto; + + +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class PanDataDTO implements Serializable { + + private static final long serialVersionUID = 1232822221212L; + + private String dataTime; + + private String attributeType; + + private String dataValue; + + private String deviceCode; + + + +} 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 index a082d00..2a943ad 100644 --- 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 @@ -23,6 +23,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -37,6 +38,7 @@ * @author zt * @since 2025-01-22 */ +@Slf4j @RequiredArgsConstructor @Service public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { @@ -71,8 +73,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -80,8 +81,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}",devCode, e); } } @@ -141,8 +141,7 @@ } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -222,8 +221,10 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); +// e.printStackTrace(); +// log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); + } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java index dd80611..cd24860 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java @@ -83,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -124,8 +123,7 @@ busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -200,8 +198,7 @@ alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } //低电量报警处理 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 302b446..f0def39 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 @@ -76,8 +76,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -85,8 +84,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -133,8 +131,7 @@ if (i < jsonArray.size() - 1) continue; busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -217,8 +214,7 @@ } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } 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 e5ba8f7..a02af88 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataMonitorPipeOtherServiceImpl extends ServiceImpl implements IDataMonitorPipeOtherService, IDataAbstractService { @@ -73,8 +75,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -116,8 +116,7 @@ //2.写入新的报警 alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + log.error("处理报警时发生异常,devcode:{},e:{}", devCode, e); } } } @@ -160,8 +159,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmEventCode)); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -341,8 +339,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag || ObjectUtil.isNotEmpty(alarmContent) ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java index 5dc8c2b..f383690 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java @@ -2,7 +2,6 @@ import cn.hutool.core.date.DateUtil; 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; @@ -13,15 +12,20 @@ import com.casic.missiles.modular.alarm.service.IAlarmRuleService; import com.casic.missiles.modular.data.dao.DataGasMapper; import com.casic.missiles.modular.data.dao.DataPanGasMapper; +import com.casic.missiles.modular.data.dto.PanDataDTO; import com.casic.missiles.modular.data.entity.DataPanGas; import com.casic.missiles.modular.data.service.IDataPanGasService; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.CommonUtil; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonToken; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.io.IOException; import java.util.Date; import java.util.List; import java.util.Map; @@ -68,78 +72,179 @@ } - @Transactional @Override public boolean processAcceptGasData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); - JSONArray jsonArray = jsonObject.getJSONArray("data"); - String devCode = ""; - for (int i = 0; i < jsonArray.size(); i++) { - try { - devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); - if (ObjectUtil.isEmpty(devCode)) continue; - List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); - String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); - String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); - //暂只存浓度 - if ("2".equals(attributeType)) continue; - String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); - gas = String.format("%.2f", Double.valueOf(gas)); - //1.存数据 - save(DataPanGas.builder() - .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") - .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") - .deviceCode(devCode) - .concentration(gas) - .logtime(DateUtil.parseDateTime(dataTime)) - .build());//存储采集数据 - //2.有无超限处理流程(判断最后一条数据) -// if (i < jsonArray.size() - 1) continue; - - //3.清除设备告警 - alarmRecordsService.cancelDeviceAlarm(devCode); - //4.存报警 - //若没绑场站,则不产生报警 - boolean alarmFlag = false; - String bfcf = busDeviceService.getBfcf(devCode); - 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))) { - dataTime = dataTime.replaceAll("-", ""); - dataTime = dataTime.replaceAll(":", ""); - dataTime = dataTime.replaceAll("\\s+", ""); - alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); - } - break; - } - } - } - //5.清数据报警 - if (!alarmFlag) { - alarmRecordsService.cancelDataAlarm(devCode); - } - //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); - //7.更新监测井状态 (1:正常,2:报警) - if (busWellDTOList != null && busWellDTOList.size() > 0) { - alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); - } - } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + JsonFactory factory = new JsonFactory(); + try (JsonParser parser = factory.createParser(jsonObject.getString("data"))) { + // 定位到 "data" 数组 + while (parser.nextToken() != JsonToken.START_ARRAY) { + parser.nextToken(); } + // 逐条处理数据 + while (parser.nextToken() != JsonToken.END_ARRAY) { + if (parser.getCurrentToken() == JsonToken.START_OBJECT) { + processSingleData(parseJsonObject(parser)); + } + + } + } catch (IOException e) { + e.printStackTrace(); } + return true; } + private PanDataDTO parseJsonObject(JsonParser parser) throws IOException { + PanDataDTO panDataDTO = new PanDataDTO(); + while (parser.nextToken() != JsonToken.END_OBJECT) { + String fieldName = parser.getCurrentName(); + if ("dataTime".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataTime(parser.getText()); + } else if ("attributeType".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setAttributeType(parser.getText()); + } else if ("dataValue".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataValue(parser.getText()); + } else if ("deviceCode".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDeviceCode(parser.getText()); + } + } + return panDataDTO; + } + + + private void processSingleData(PanDataDTO panDataDTO) { + try { + String devCode = panDataDTO.getDeviceCode(); + if (ObjectUtil.isEmpty(devCode)) return; + List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); + String gas = panDataDTO.getDataValue(); + String attributeType = panDataDTO.getAttributeType(); + //暂只存浓度 + if ("2".equals(attributeType)) return; + String dataTime = panDataDTO.getDataTime(); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataPanGas.builder() + .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .deviceCode(devCode) + .concentration(gas) + .logtime(DateUtil.parseDateTime(dataTime)) + .build());//存储采集数据 + + boolean alarmFlag = false; + String bfcf = busDeviceService.getBfcf(devCode); + 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))) { +// dataTime = dataTime.replaceAll("-", ""); +// dataTime = dataTime.replaceAll(":", ""); +// dataTime = dataTime.replaceAll("\\s+", ""); + alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); + //7.更新监测井状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + log.error("处理云台数据时发生异常,devcode:{},data:{},e:{}", panDataDTO.getDeviceCode(), panDataDTO.toString(), e); + } + } + + +// @Transactional +// @Override +// public boolean processAcceptGasData(Map dataParams) { +// JSONObject jsonObject = new JSONObject(dataParams); +// JSONArray jsonArray = jsonObject.getJSONArray("data"); +// String devCode = ""; +// for (int i = 0; i < jsonArray.size(); i++) { +// try { +// devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); +// if (ObjectUtil.isEmpty(devCode)) continue; +// List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); +// String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); +// String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); +// //暂只存浓度 +// if ("2".equals(attributeType)) continue; +// String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); +// gas = String.format("%.2f", Double.valueOf(gas)); +// //1.存数据 +// save(DataPanGas.builder() +// .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") +// .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") +// .deviceCode(devCode) +// .concentration(gas) +// .logtime(DateUtil.parseDateTime(dataTime)) +// .build());//存储采集数据 +// //2.有无超限处理流程(判断最后一条数据) +//// if (i < jsonArray.size() - 1) continue; +// +// //3.清除设备告警 +//// alarmRecordsService.cancelDeviceAlarm(devCode); +// //4.存报警 +// //若没绑场站,则不产生报警 +// boolean alarmFlag = false; +// String bfcf = busDeviceService.getBfcf(devCode); +// 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))) { +//// dataTime = dataTime.replaceAll("-", ""); +//// dataTime = dataTime.replaceAll(":", ""); +//// dataTime = dataTime.replaceAll("\\s+", ""); +// alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); +// } +// break; +// } +// } +// } +// //5.清数据报警 +// if (!alarmFlag) { +// alarmRecordsService.cancelDataAlarm(devCode); +// } +// //6.更新电量及状态 (1:正常,2:报警) +// alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); +// //7.更新监测井状态 (1:正常,2:报警) +// if (busWellDTOList != null && busWellDTOList.size() > 0) { +// alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); +// } +// } catch (Exception e) { +// log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); +// } +// } +// return true; +// } + @Override public boolean acceptAlarmData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); 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 37d731d..a17953b 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataTubeOtherServiceImpl extends ServiceImpl implements IDataTubeOtherService, IDataAbstractService { @@ -73,7 +75,7 @@ } } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,7 +84,7 @@ imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -122,8 +124,8 @@ } //特殊处理消警 if ("CancelWaterImmersionAlarm".equals(alarmType)) { - if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { - alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + if (alarmRecordsService.isWatchAlarms(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelWatchAlarms(devCode, "WaterImmersionAlarm"); } continue; } @@ -146,8 +148,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmType)); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -227,8 +228,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java new file mode 100644 index 0000000..3be65dd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java @@ -0,0 +1,170 @@ +package com.casic.missiles.modular.aop; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.aop.annotion.ReflectionUtils; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.modular.interfaces.log.LogManager; +import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.Serializable; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Aspect +@Component +public class OperateLogAspect { + private Logger log = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private ApplicationContext applicationContext; + + public static volatile Map oldMap = new HashMap<>(); + + public OperateLogAspect() { + } + + @Pointcut("@annotation(com.casic.missiles.modular.aop.annotion.OperateLog)") + public void cutService() { + } + + @Around("cutService()") + public Object recordSysLog(ProceedingJoinPoint point) throws Throwable { + Object result = point.proceed(); + + try { + this.handle(point); + } catch (Exception var4) { + this.log.error("日志记录出错!", var4); + } + + return result; + } + + /** + * 处理请求前执行 + */ + @Before(value = "@annotation(operateLog)") + public void boBefore(JoinPoint joinPoint, OperateLog operateLog) { + Object info = joinPoint.getArgs()[0]; + if ("edit".equals(operateLog.type()) && operateLog.needDefaultCompare()) { + Class cls = operateLog.serviceClass(); + IService service = (IService) applicationContext.getBean(cls); + Object result; + if (service instanceof IBusDeviceService) { + result = ((IBusDeviceService) service).getByDeviceId((Long) ReflectionUtils.getFieldValue(info, "id")); + } else + result = service.getById((Serializable) ReflectionUtils.getFieldValue(info, "id")); + oldMap = (Map) objectToMap(result); // 存储修改前的对象 + } + } + + private void handle(ProceedingJoinPoint point) throws Exception { + Signature sig = point.getSignature(); + MethodSignature msig = null; + if (!(sig instanceof MethodSignature)) { + throw new IllegalArgumentException("该注解只能用于方法"); + } else { + msig = (MethodSignature) sig; + Object target = point.getTarget(); + Method currentMethod = target.getClass().getMethod(msig.getName(), msig.getParameterTypes()); + String methodName = currentMethod.getName(); + AuthUser user = ShiroKit.getUser(); + if (null != user) { + String className = point.getTarget().getClass().getName(); + Object[] params = point.getArgs(); + OperateLog annotation = (OperateLog) currentMethod.getAnnotation(OperateLog.class); + String bussinessName = annotation.value(); + String key = annotation.key(); + Class dictClass = annotation.dict(); + String sb = argsArrayToString(params); + String msg = sb; + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + if ("add".equals(annotation.type())) { + Map parameters = (Map) objectToMap(params[0]); + msg = CollectionUtils.isEmpty(parameters) ? sb : ReflectionUtils.parseMutiKey(dictMap, key, parameters); + } else if ("edit".equals(annotation.type())) { + msg = CollectionUtils.isEmpty(oldMap) ? sb : ReflectionUtils.contrastObj(dictClass, key, params[0], oldMap); + }else if("delete".equals(annotation.type())){ + msg=dictMap.get(annotation.key())+":"+ReflectionUtils.getDeleteKeys(params[0]); + } + LogManager.me().executeLog(LogTaskFactory.bussinessLog(user.getId(), bussinessName, className, methodName, msg)); + } + } + } + + + /** + * 参数拼装 + */ + private String argsArrayToString(Object[] paramsArray) { + Gson gson = new GsonBuilder().create(); + String params = ""; + if (paramsArray != null && paramsArray.length > 0) { + for (int i = 0; i < paramsArray.length; i++) { + if (!isFilterObject(paramsArray[i])) { + params += gson.toJson(paramsArray[i]) + " & "; + } + } + } + return params.trim(); + } + + + /** + * 判断是否需要过滤的对象。 + * + * @param o 对象信息。 + * @return 如果是需要过滤的对象,则返回true;否则返回false。 + */ + public boolean isFilterObject(final Object o) { + return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse; + } + + private Map objectToMap(Object obj) { + if (obj == null) { + return null; + } + ObjectMapper mapper = new ObjectMapper(); + mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + // 如果使用JPA请自己打开这条配置 + // mapper.addMixIn(Object.class, IgnoreHibernatePropertiesInJackson.class); + Map mappedObject = mapper.convertValue(obj, Map.class); + return mappedObject; + + + } +} + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java new file mode 100644 index 0000000..77afa9c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.aop.annotion; + +import java.lang.annotation.*; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.FIELD}) +@Documented +public @interface DataName { + String name() default ""; // 字段名称 + + /** + * 读取枚举内容转义表达式 (如: 0=男,1=女,2=未知) + */ + String readConverterExp() default ""; +} + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java new file mode 100644 index 0000000..f1f59ad --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.aop.annotion; + + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.common.constant.dictmap.base.SystemDict; + +import java.lang.annotation.*; + +@Inherited +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.METHOD}) +public @interface OperateLog { + String value() default ""; + + String key() default "id"; + + Class serviceClass() default IService.class; + + // 是否需要比较新旧数据 + boolean needDefaultCompare() default true; + + //操作类型 add update delete + String type() default "update"; + + Class dict() default SystemDict.class; +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java new file mode 100644 index 0000000..eb773ad --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java @@ -0,0 +1,328 @@ +package com.casic.missiles.modular.aop.annotion; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.modular.interfaces.dictmap.factory.DictFieldWrapperFactory; +import lombok.extern.slf4j.Slf4j; + +import java.beans.PropertyDescriptor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.*; + +import static com.casic.missiles.modular.interfaces.utils.Contrast.firstCharToLowerCase; +import static com.casic.missiles.modular.interfaces.utils.Contrast.firstCharToUpperCase; + +@Slf4j +public class ReflectionUtils { + + /** + * 直接读取对象属性值, 无视private/protected修饰符, 不经过getter函数. + * + * @param obj 读取的对象 + * @param fieldName 读取的列 + * @return 属性值 + */ + public static Object getFieldValue(final Object obj, final String fieldName) { + Field field = getAccessibleField(obj, fieldName); + if (field == null) { + throw new IllegalArgumentException("Could not find field [" + fieldName + "] on target [" + obj + "]"); + } + + Object result = null; + try { + result = field.get(obj); + } catch (IllegalAccessException e) { + log.error("不可能抛出的异常{}", e.getMessage()); + e.printStackTrace(); + } + return result; + } + + /** + * 循环向上转型, 获取对象的DeclaredField, 并强制设置为可访问.如向上转型到Object仍无法找到, 返回null. + * + * @param obj 查找的对象 + * @param fieldName 列名 + * @return 列 + */ + public static Field getAccessibleField(final Object obj, final String fieldName) { + for (Class superClass = obj.getClass(); superClass != Object.class; superClass = superClass.getSuperclass()) { + try { + Field field = superClass.getDeclaredField(fieldName); + makeAccessible(field); + return field; + } catch (NoSuchFieldException e) { // NOSONAR + // Field不在当前类定义,继续向上转型 + e.printStackTrace(); + continue; // new add + } + } + return null; + } + + /** + * 改变private/protected的成员变量为public,尽量不调用实际改动的语句,避免JDK的SecurityManager抱怨。 + * + * @param + */ + public static void makeAccessible(Field field) { + if ((!Modifier.isPublic(field.getModifiers()) || !Modifier.isPublic(field.getDeclaringClass().getModifiers()) || Modifier + .isFinal(field.getModifiers())) && !field.isAccessible()) { + field.setAccessible(true); + } + } + + /** + * 获取两个对象同名属性内容不相同的列表 + * + * @param class1 old对象 + * @param class2 new对象 + * @return 区别列表 + * @throws ClassNotFoundException 异常 + * @throws IllegalAccessException 异常 + */ + public static List> compareTwoClass(Object class1, Object class2) throws ClassNotFoundException, IllegalAccessException { + List> list = new ArrayList>(); + // 获取对象的class + Class clazz1 = class1.getClass(); + Class clazz2 = class2.getClass(); + // 获取对象的属性列表 + Field[] field1 = clazz1.getDeclaredFields(); + Field[] field2 = clazz2.getDeclaredFields(); + StringBuilder sb = new StringBuilder(); + // 遍历属性列表field1 + for (int i = 0; i < field1.length; i++) { + // 遍历属性列表field2 + for (int j = 0; j < field2.length; j++) { + // 如果field1[i]属性名与field2[j]属性名内容相同 + if (field1[i].getName().equals(field2[j].getName())) { + if (field1[i].getName().equals(field2[j].getName())) { + field1[i].setAccessible(true); + field2[j].setAccessible(true); + // 如果field1[i]属性值与field2[j]属性值内容不相同 + if (!compareTwo(field1[i].get(class1), field2[j].get(class2))) { + Map map2 = new HashMap(); + DataName name = field1[i].getAnnotation(DataName.class); + String fieldName = ""; + if (name != null) { + fieldName = name.name(); + } else { + fieldName = field1[i].getName(); + } + map2.put("name", fieldName); + map2.put("old", field1[i].get(class1)); + map2.put("new", field2[j].get(class2)); + list.add(map2); + } + break; + } + } + } + } + return list; + } + + /** + * 对比两个数据是否内容相同 + * + * @param object1 比较对象1 + * @param object2 比较对象2 + * @return boolean类型 + */ + public static boolean compareTwo(Object object1, Object object2) { + if (object1 == null && object2 == null) { + return true; + } + if (object1 == null && object2 != null) { + return false; + } + if (object1.equals(object2)) { + return true; + } + return false; + } + + public static String contrastObjByName(Class dictClass, String key, Object pojo1, Map pojo2) throws IllegalAccessException, InstantiationException { + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + String str = parseMutiKey(dictMap, key, pojo2) + ";;;"; + + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if (!"serialVersionUID".equals(field.getName())) { + String prefix = "get"; + int prefixLength = 3; + if (field.getType().getName().equals("java.lang.Boolean")) { + prefix = "is"; + prefixLength = 2; + } + + Method getMethod = null; + + try { + getMethod = clazz.getDeclaredMethod(prefix + firstCharToUpperCase(field.getName())); + } catch (NoSuchMethodException var22) { + System.err.println("this className:" + clazz.getName() + " is not methodName: " + var22.getMessage()); + continue; + } + + Object o1 = getMethod.invoke(pojo1); + Object o2 = pojo2.get(firstCharToLowerCase(getMethod.getName().substring(prefixLength))); + if (o1 != null && o2 != null) { + if (o1 instanceof Date) { + o1 = DateUtil.format(new Date(), "yyyy-MM-dd"); + } else if (o1 instanceof Integer) { + o2 = Integer.parseInt(o2.toString()); + } + + if (!o1.toString().equals(o2.toString())) { + if (i != 1) { + str = str + ";;;"; + } + + String fieldName = dictMap.get(field.getName()); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(field.getName()); + if (fieldWarpperMethodName != null) { + Object o1Warpper = DictFieldWrapperFactory.createFieldWrapper(o1, fieldWarpperMethodName); + Object o2Warpper = DictFieldWrapperFactory.createFieldWrapper(o2, fieldWarpperMethodName); + str = str + "字段名称:" + fieldName + ",旧值:" + o1Warpper + ",新值:" + o2Warpper; + } else { + str = str + "字段名称:" + fieldName + ",旧值:" + o1 + ",新值:" + o2; + } + + ++i; + } + } + } + } + } catch (Exception var23) { + var23.printStackTrace(); + } + + return str; + } + + public static String parseMutiKey(AbstractDictMap dictMap, String key, Map requests) { + StringBuilder sb = new StringBuilder(); + if (key.indexOf(",") != -1) { + String[] keys = key.split(","); + String[] var13 = keys; + int var14 = keys.length; + + for (int var7 = 0; var7 < var14; ++var7) { + String item = var13[var7].trim(); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(item); + Object value = requests.get(item); + if (fieldWarpperMethodName != null) { + Object valueWarpper = DictFieldWrapperFactory.createFieldWrapper(value, fieldWarpperMethodName); + sb.append(dictMap.get(item) + "=" + valueWarpper + ","); + } else { + sb.append(dictMap.get(item) + "=" + (ObjectUtil.isNotEmpty(value) ? value.toString() : "") + ","); + } + } + + return StrUtil.removeSuffix(sb.toString(), ","); + } else { + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(key); + Object value = requests.get(key); + if (fieldWarpperMethodName != null) { + Object valueWarpper = DictFieldWrapperFactory.createFieldWrapper(value, fieldWarpperMethodName); + sb.append(dictMap.get(key) + "=" + valueWarpper); + } else { + sb.append(dictMap.get(key) + "=" + (ObjectUtil.isNotEmpty(value) ? value.toString() : "")); + } + + return sb.toString(); + } + } + + public static String getDeleteKeys(Object pojo1) { + String str = ""; + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if ("keys".equals(field.getName())) { + PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); + Method getMethod = pd.getReadMethod(); + Object o1 = getMethod.invoke(pojo1); + return ObjectUtil.isNotEmpty(o1) ? o1.toString().replaceAll("\\[|]", "") : "".concat(",已删除"); + } + } + + } catch (Exception var21) { + var21.printStackTrace(); + } + return str; + } + + public static String contrastObj(Class dictClass, String key, Object pojo1, Map pojo2) throws IllegalAccessException, InstantiationException { + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); +// String str = parseMutiKey(dictMap, key, pojo2) + ";;;"; + String str = ""; + + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if (!"serialVersionUID".equals(field.getName())) { + PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); + Method getMethod = pd.getReadMethod(); + Object o1 = getMethod.invoke(pojo1); + Object o2 = pojo2.get(firstCharToLowerCase(getMethod.getName().substring(3))); + if (o1 != null && o2 != null) { + if (o1 instanceof Integer) { + o2 = Integer.parseInt(o2.toString()); + } else if (o1 instanceof Date) { + o1 = DateUtil.format((Date) o1, "yyyy-MM-dd HH:mm:ss"); + } + + if (!o1.toString().equals(o2.toString())) { + if (i != 1) { + str = str + ";"; + } + + String fieldName = dictMap.get(field.getName()); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(field.getName()); + if (fieldWarpperMethodName != null) { + Object o1Warpper = DictFieldWrapperFactory.createFieldWrapper(o1, fieldWarpperMethodName); + Object o2Warpper = DictFieldWrapperFactory.createFieldWrapper(o2, fieldWarpperMethodName); + str = str + fieldName + ":将【" + o1Warpper + "】,改为【" + o2Warpper + "】"; + } else { + str = str + fieldName + ":将【" + o1 + "】,改为【" + o2 + "】"; + } + + ++i; + } + } + } + } + } catch (Exception var21) { + var21.printStackTrace(); + } + + return str; + } + + +} \ No newline at end of file diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java index 7497ebf..18fd820 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java @@ -8,12 +8,14 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.StateDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.DeviceTypeDict; import com.casic.missiles.modular.device.dto.BaseDeviceTypeDTO; import com.casic.missiles.modular.device.dto.BaseDeviceTypeIdsDTO; import com.casic.missiles.modular.device.dto.SelectDTO; @@ -63,6 +65,7 @@ return ReturnUtil.success(super.packForBT(baseDeviceTypePage)); } + @OperateLog(value = "新增设备类型", key = "typeName,watchObject,isUsed,typeDescription", dict = DeviceTypeDict.class, type = "add") @ApiOperation("增加设备类型") @PostMapping("/add") @ResponseBody @@ -71,6 +74,7 @@ return ReturnUtil.success(iBaseDeviceTypeService.saveBaseDeviceType(baseDeviceType)); } + @OperateLog(value = "编辑设备类型", dict = DeviceTypeDict.class, serviceClass = IBaseDeviceTypeService.class, type = "edit") @ApiOperation("编辑设备类型") @PostMapping("/edit") @ResponseBody @@ -81,10 +85,11 @@ return ReturnUtil.success(iBaseDeviceTypeService.updateById(baseDeviceType)); } + @OperateLog(value = "删除设备类型", key = "typeName", dict = DeviceTypeDict.class, serviceClass = IBaseDeviceTypeService.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); @@ -113,7 +118,7 @@ public ReturnDTO selectList(@RequestBody BaseDeviceTypeIdsDTO request) { QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.in(request.getDeviceTypeList()!=null&&request.getDeviceTypeList().size()>0, "id", request.getDeviceTypeList()); + queryWrapper.in(request.getDeviceTypeList() != null && request.getDeviceTypeList().size() > 0, "id", request.getDeviceTypeList()); queryWrapper.eq("IS_USED", "1"); List baseDeviceTypes = iBaseDeviceTypeService.list(queryWrapper); List selectDTOS = new ArrayList<>(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java index 42d752d..54944e2 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java @@ -3,14 +3,15 @@ import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.IdDTO; -import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.ProductDict; import com.casic.missiles.modular.device.dto.BaseProductDTO; import com.casic.missiles.modular.device.dto.SelectProductDTO; import com.casic.missiles.modular.device.entity.BaseProduct; @@ -21,7 +22,6 @@ import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; -import java.util.List; import java.util.Objects; /** @@ -49,6 +49,7 @@ return ReturnUtil.success(super.packForBT(iBaseProductService.pageList(page, requestDTO))); } + @OperateLog(value = "新增产品", key = "productName,deviceType,deviceModel,manufacturerId,protocol,accessMethod,powerSupplyMode,dataService", dict = ProductDict.class, type = "add") @ApiOperation("新增") @PostMapping("/add") @ResponseBody @@ -58,6 +59,7 @@ } + @OperateLog(value = "编辑产品", dict = ProductDict.class, serviceClass = IBaseProductService.class, type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -68,10 +70,11 @@ return ReturnUtil.success(iBaseProductService.updateBaseProductById(baseProduct)); } + @OperateLog(value = "删除产品", key = "productName", dict = ProductDict.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 509bd7b..103acf2 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 @@ -9,6 +9,7 @@ import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; @@ -17,6 +18,7 @@ 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.aop.annotion.OperateLog; import com.casic.missiles.modular.device.dict.BusConfigDict; import com.casic.missiles.modular.device.dict.DeviceDict; import com.casic.missiles.modular.device.dto.*; @@ -65,7 +67,8 @@ } - @BussinessLog(value = "新增设备", key = "devcode,deviceName,deviceType,installDate,productId", dict = DeviceDict.class) + @OperateLog(value = "新增设备", key = "devcode,deviceType,productId," + + "valid,communicationType,simId,warrantyPeriod,tagNumber,leftLength,rightLength,", dict = DeviceDict.class,type = "add") @CacheEvict(value="busLedgersCache", key="#busDevice.getDevcode()") @ApiOperation("新增") @PostMapping("/add") @@ -75,7 +78,8 @@ } - @BussinessLog(value = "编辑设备", key = "devcode,deviceName,deviceType,installDate,productId", dict = DeviceDict.class) + @OperateLog(value = "编辑设备", key = "devcode,deviceType,installDate,productId," + + "leftLength,rightLength,communicationType,simId,warrantyPeriod", dict = DeviceDict.class,serviceClass = IBusDeviceService.class,type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -86,11 +90,12 @@ return ReturnUtil.success(iBusDeviceService.updateBusDevice(busDevice)); } + @OperateLog(value = "删除设备", key = "devcode", dict = DeviceDict.class,serviceClass = IBusDeviceService.class,type = "delete") @CacheEvict(value="busLedgersCache", allEntries = true) @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 31de56e..6f35acd 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 @@ -4,8 +4,8 @@ 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.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.page.PageFactory; @@ -16,11 +16,8 @@ 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.BusDeviceDTO; -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.BusDevice; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.CommonUtil; @@ -53,6 +50,7 @@ private final IBusLedgerPipeService iBusLedgerPipeService; private final IBaseExportService iBaseExportService; + private final AbstractDictService abstractDictService; @ApiOperation("新建点位") @PostMapping("/addPosition") @@ -60,10 +58,10 @@ 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,"安装位号已存!!!"); + if (busLedgerPipeList != null && busLedgerPipeList.size() > 0) { + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE, "安装位号已存!!!"); } - Long id =IdUtil.getSnowflake(1,2).nextId(); + Long id = IdUtil.getSnowflake(1, 2).nextId(); busLedgerPipe.setId(id); busLedgerPipe.setLedgerCode(busLedgerPipe.getTagNumber()); busLedgerPipe.setArea(CommonUtil.getAreaCode(busLedgerPipe.getPosition())); @@ -139,7 +137,11 @@ page.setCurrent(1); page.setSize(Integer.MAX_VALUE); Page devicePage = iBusLedgerPipeService.listPage(page, busLedgerPipeRequestDTO); + List records = devicePage.getRecords(); try { + for (BusLedgerPipe busLedgerPipe : records) { + busLedgerPipe.setLocationCategory(abstractDictService.getDictNameByCode("locationType", busLedgerPipe.getLocationCategory())); + } iBaseExportService.exportExcel(response, BusLedgerPipe.class, devicePage.getRecords(), ExportEnum.LEDGER_PIPE_EXPORT.getSheetName()); } catch (Exception e) { e.printStackTrace(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java index e87f3f8..8040c74 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java @@ -7,10 +7,13 @@ 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.DeletesDTO; import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.ProtocolDict; import com.casic.missiles.modular.device.dto.BusProtocolDTO; import com.casic.missiles.modular.device.entity.BusProtocol; import com.casic.missiles.modular.device.service.IBusProtocolService; @@ -35,10 +38,10 @@ @RestController @RequestMapping("/system/busProtocol") public class BusProtocolController extends ExportController { - + private final IBusProtocolService protocolService; - + @ApiOperation("查询分页接口") @PostMapping("/listPage") @ResponseBody @@ -47,9 +50,10 @@ queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getProtocolName()), "PROTOCOL_NAME", requestDTO.getProtocolName()); queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getProtocolCode()), "PROTOCOL_CODE", requestDTO.getProtocolCode()); Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(protocolService.page(page,queryWrapper))); + return ReturnUtil.success(super.packForBT(protocolService.page(page, queryWrapper))); } + @OperateLog(value = "新增协议", key = "protocolName,protocolCode,version,ip,description", dict = ProtocolDict.class, type = "add") @ApiOperation("新增") @PostMapping("/add") @ResponseBody @@ -58,6 +62,7 @@ return ReturnUtil.success(protocolService.save(busProtocol)); } + @OperateLog(value = "编辑协议", dict = ProtocolDict.class, serviceClass = IBusProtocolService.class, type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -68,10 +73,11 @@ return ReturnUtil.success(protocolService.updateById(busProtocol)); } + @OperateLog(value = "删除协议", key = "protocolName", dict = ProtocolDict.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 23ddee9..24c4712 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 @@ -2,7 +2,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.entity.BusDevice; import com.casic.missiles.util.InConditionDriver; @@ -46,27 +45,27 @@ @Param("orderColumn") String orderColumn, @Param("request") CommonRequestDTO request); - @Select("SELECT BFZT from bus_device where VALID=1 and DEVCODE= #{devcode} limit 1" ) - String getBfcf( @Param("devcode") String devcode); + @Select("SELECT BFZT from bus_device where VALID=1 and DEVCODE= #{devcode} limit 1") + String getBfcf(@Param("devcode") String devcode); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getMethaneData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getMethaneData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_tube_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getTubeOtherData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_tube_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getTubeOtherData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gasliquid_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getLGData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gasliquid_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getLGData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_monitor_pipe_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getMonitorPipeOtherData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_monitor_pipe_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getMonitorPipeOtherData(@Param("devcodes") List devcodes); - @Select("SELECT ALARM_THRESHOLD FROM `alarm_rule_device` where DEVCODE = #{devcode} order by ALARM_THRESHOLD asc " ) + @Select("SELECT ALARM_THRESHOLD FROM `alarm_rule_device` where DEVCODE = #{devcode} order by ALARM_THRESHOLD asc ") List getSpecialDeviceRule(@Param("devcode") String devcode); @Select(" select ar.ALARM_THRESHOLD from alarm_rule ar where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + @@ -81,4 +80,7 @@ "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") List getListByWellId(@Param("wellId") Long wellId); + + BusDeviceOperateLogDTO getByDeviceId(@Param("id") Long id); + } 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 8ba4b15..3109344 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 @@ -44,7 +44,7 @@ LEFT JOIN base_product bp ON bd.PRODUCT_ID = bp.ID LEFT JOIN bus_device_ledger br on br.DEVICE_ID = bd.ID AND br.VALID='1' LEFT JOIN bus_manufacturer bm on bm.ID = bp.MANUFACTURER_ID - LEFT JOIN bus_ledger_all_view bl on bl.ID = br.LEDGER_ID AND br.VALID='1' and bl.type = br.type + LEFT JOIN bus_ledger_all_view bl on bl.ID = br.LEDGER_ID AND bl.VALID='1' and bl.type = br.type where bd.valid>0 @@ -95,6 +95,32 @@ + + + SELECT - rd.*, - at.alarm_type, - bt.TYPE_NAME as devTypeName - FROM - alarm_records rd - LEFT JOIN bus_ledger_all_view lr ON lr.ledgerCode = rd.LEDGER_CODE - LEFT JOIN alarm_type at ON at.ID = rd.ALARM_TYPE_ID - LEFT JOIN bus_device bd ON bd.DEVCODE = rd.DEVCODE and bd.valid >0 - LEFT JOIN base_device_type bt ON bt.id = bd.DEVICE_TYPE + rd.*, + AT.alarm_type, + bt.TYPE_NAME AS devTypeName + FROM + alarm_records rd + LEFT JOIN bus_device bd ON bd.DEVCODE = rd.DEVCODE + AND bd.valid > 0 + LEFT JOIN bus_device_ledger bl ON bd.ID = bl.DEVICE_ID + AND bl.VALID = '1' + 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' + AND lr.ledgerCode = rd.LEDGER_CODE + LEFT JOIN alarm_type AT ON AT.ID = rd.ALARM_TYPE_ID + LEFT JOIN base_device_type bt ON bt.id = bd.DEVICE_TYPE where rd.STATUS ='1' and rd.EXCEPTION_TYPE='0' @@ -695,6 +705,7 @@ dt.LOGTIME, bv.tagNumber, bv.ledgerCode, + bv.ledgerName, bdt.TYPE_NAME, bv.place, bv.type, @@ -720,6 +731,7 @@ t.tagNumber, t.ledgerCode, t.TYPE_NAME, + t.ledgerName, t.OFF_DAYS, t.LOGTIME, t.place, diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml index 7aff0f0..a63dac1 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml @@ -25,34 +25,55 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java index 3e0edd6..9dab3a7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java @@ -71,4 +71,18 @@ private Long deptid; + @ApiModelProperty("经度") + private String lngGaode; + + @ApiModelProperty("纬度") + private String latGaode; + + @ApiModelProperty("监测类型") + private String watchObject; + + @ApiModelProperty("点位id") + private Long ledgerId; + + + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java index e938da8..60464c4 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java @@ -12,6 +12,7 @@ private String deviceType; private String tagNumber; private String ledgerCode; + private String ledgerName; private String place; //台账类型 private String type; 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 ac4cabe..e623df7 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 @@ -44,6 +44,7 @@ import static cn.hutool.core.date.DateUnit.DAY; import static com.casic.missiles.util.TimeConvertUtil.TimeConverter; +import static com.casic.missiles.util.TimeConvertUtil.TimeConverterSecond; /** *

@@ -180,8 +181,8 @@ public DeviceAlarmDetailDTO deviceAlarmDetail(Long id) { DeviceAlarmDetailDTO alarmDetail = this.baseMapper.deviceAlarmDetail(id); - alarmDetail.setCancelDuration(TimeConverter(alarmDetail.getCancelDuration())); - alarmDetail.setProcessDuration(TimeConverter(alarmDetail.getProcessDuration())); + alarmDetail.setCancelDuration(TimeConverterSecond(alarmDetail.getCancelDuration())); + alarmDetail.setProcessDuration(TimeConverterSecond(alarmDetail.getProcessDuration())); alarmDetail.setDeptName(ObjectUtil.isNotEmpty(alarmDetail.getDeptid()) ? commonServer.getDeptNamesByDeptId(alarmDetail.getDeptid()) : ""); // alarmDetail.setAddress(alarmDetail.getTagNumber().concat("|").concat(alarmDetail.getLedgerName())); alarmDetail.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmDetail.getAlarmCategory())); @@ -524,16 +525,26 @@ @Override public void cancelDeviceAlarm(String devCode) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("DEVCODE", devCode); - updateWrapper.eq("EXCEPTION_TYPE", "1"); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE", devCode); + queryWrapper.eq("EXCEPTION_TYPE", "1"); //只有挂起和已处置的才消 // updateWrapper.ge("PROCESS_STATUS", "3"); - updateWrapper.eq("STATUS", "1"); - updateWrapper.set("STATUS", "0"); - updateWrapper.set("CANCEL_TIME", new Date()); - this.update(updateWrapper); - //toDo:需要加流程取消日志 + queryWrapper.eq("STATUS", "1"); + List alarmRecordsList = this.list(queryWrapper); + if (alarmRecordsList != null && alarmRecordsList.size() > 0) { + alarmRecordsList.forEach(alarmRecords -> { + alarmRecords.setStatus("0"); + alarmRecords.setCancelTime(new Date()); + alarmRecords.setPreProcessStatus(alarmRecords.getProcessStatus()); + alarmRecords.setProcessStatus(ApprovalStatusEnum.FINISHED.getCode()); + this.updateById(alarmRecords); + }); + //添加流程日志 + approvalLogMapper.insert(new ApprovalLog(alarmRecordsList.get(0).getId(), "1", + "", ApprovalStatusEnum.FINISHED.getCode(), + null)); + } } @Override @@ -674,8 +685,12 @@ AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), data.concat("%LEL"), data, - alarmRuleResponseDTO.getAlarmLevelId(),DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmLevelId(), DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmRuleResponseDTO.getAlarmTypeName(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -721,7 +736,7 @@ @Override - public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime,List busWellDTOList, + public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime, List busWellDTOList, Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { @@ -730,8 +745,12 @@ try { AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, - alarmLevelId, DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmLevelId, DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmTypeName, + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace() + , "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -793,7 +812,11 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.get().getAlarmTypeId(), alarmRuleResponseDTO.get().getAlarmTypeName(), alarmRuleResponseDTO.get().getAlarmLevelId(), DateUtil.parse(logTime), - alarmRuleResponseDTO.get().getAlarmThreshold(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "1"); + alarmRuleResponseDTO.get().getAlarmThreshold(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "1"); this.save(alarmRecords); } catch (Exception e) { e.printStackTrace(); @@ -846,8 +869,8 @@ * @param cell */ @Override - public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent,String logTime) { - this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent,DateUtil.parse(logTime)); + public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent, String logTime) { + this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent, DateUtil.parse(logTime)); } @Override @@ -903,7 +926,10 @@ offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), - offDeviceDTO.getPlace(), "1"); + ObjectUtil.isNotEmpty(offDeviceDTO.getLedgerName()) ? + offDeviceDTO.getTagNumber().concat("|"). + concat(offDeviceDTO.getLedgerName()) : + offDeviceDTO.getPlace(), "1"); alarmRecordsList.add(alarmRecords); ledgers.add(offDeviceDTO); } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java new file mode 100644 index 0000000..cb554b9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.data.dto; + + +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class PanDataDTO implements Serializable { + + private static final long serialVersionUID = 1232822221212L; + + private String dataTime; + + private String attributeType; + + private String dataValue; + + private String deviceCode; + + + +} 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 index a082d00..2a943ad 100644 --- 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 @@ -23,6 +23,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -37,6 +38,7 @@ * @author zt * @since 2025-01-22 */ +@Slf4j @RequiredArgsConstructor @Service public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { @@ -71,8 +73,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -80,8 +81,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}",devCode, e); } } @@ -141,8 +141,7 @@ } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -222,8 +221,10 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); +// e.printStackTrace(); +// log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); + } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java index dd80611..cd24860 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java @@ -83,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -124,8 +123,7 @@ busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -200,8 +198,7 @@ alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } //低电量报警处理 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 302b446..f0def39 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 @@ -76,8 +76,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -85,8 +84,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -133,8 +131,7 @@ if (i < jsonArray.size() - 1) continue; busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -217,8 +214,7 @@ } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } 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 e5ba8f7..a02af88 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataMonitorPipeOtherServiceImpl extends ServiceImpl implements IDataMonitorPipeOtherService, IDataAbstractService { @@ -73,8 +75,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -116,8 +116,7 @@ //2.写入新的报警 alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + log.error("处理报警时发生异常,devcode:{},e:{}", devCode, e); } } } @@ -160,8 +159,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmEventCode)); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -341,8 +339,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag || ObjectUtil.isNotEmpty(alarmContent) ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java index 5dc8c2b..f383690 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java @@ -2,7 +2,6 @@ import cn.hutool.core.date.DateUtil; 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; @@ -13,15 +12,20 @@ import com.casic.missiles.modular.alarm.service.IAlarmRuleService; import com.casic.missiles.modular.data.dao.DataGasMapper; import com.casic.missiles.modular.data.dao.DataPanGasMapper; +import com.casic.missiles.modular.data.dto.PanDataDTO; import com.casic.missiles.modular.data.entity.DataPanGas; import com.casic.missiles.modular.data.service.IDataPanGasService; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.CommonUtil; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonToken; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.io.IOException; import java.util.Date; import java.util.List; import java.util.Map; @@ -68,78 +72,179 @@ } - @Transactional @Override public boolean processAcceptGasData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); - JSONArray jsonArray = jsonObject.getJSONArray("data"); - String devCode = ""; - for (int i = 0; i < jsonArray.size(); i++) { - try { - devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); - if (ObjectUtil.isEmpty(devCode)) continue; - List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); - String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); - String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); - //暂只存浓度 - if ("2".equals(attributeType)) continue; - String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); - gas = String.format("%.2f", Double.valueOf(gas)); - //1.存数据 - save(DataPanGas.builder() - .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") - .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") - .deviceCode(devCode) - .concentration(gas) - .logtime(DateUtil.parseDateTime(dataTime)) - .build());//存储采集数据 - //2.有无超限处理流程(判断最后一条数据) -// if (i < jsonArray.size() - 1) continue; - - //3.清除设备告警 - alarmRecordsService.cancelDeviceAlarm(devCode); - //4.存报警 - //若没绑场站,则不产生报警 - boolean alarmFlag = false; - String bfcf = busDeviceService.getBfcf(devCode); - 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))) { - dataTime = dataTime.replaceAll("-", ""); - dataTime = dataTime.replaceAll(":", ""); - dataTime = dataTime.replaceAll("\\s+", ""); - alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); - } - break; - } - } - } - //5.清数据报警 - if (!alarmFlag) { - alarmRecordsService.cancelDataAlarm(devCode); - } - //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); - //7.更新监测井状态 (1:正常,2:报警) - if (busWellDTOList != null && busWellDTOList.size() > 0) { - alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); - } - } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + JsonFactory factory = new JsonFactory(); + try (JsonParser parser = factory.createParser(jsonObject.getString("data"))) { + // 定位到 "data" 数组 + while (parser.nextToken() != JsonToken.START_ARRAY) { + parser.nextToken(); } + // 逐条处理数据 + while (parser.nextToken() != JsonToken.END_ARRAY) { + if (parser.getCurrentToken() == JsonToken.START_OBJECT) { + processSingleData(parseJsonObject(parser)); + } + + } + } catch (IOException e) { + e.printStackTrace(); } + return true; } + private PanDataDTO parseJsonObject(JsonParser parser) throws IOException { + PanDataDTO panDataDTO = new PanDataDTO(); + while (parser.nextToken() != JsonToken.END_OBJECT) { + String fieldName = parser.getCurrentName(); + if ("dataTime".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataTime(parser.getText()); + } else if ("attributeType".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setAttributeType(parser.getText()); + } else if ("dataValue".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataValue(parser.getText()); + } else if ("deviceCode".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDeviceCode(parser.getText()); + } + } + return panDataDTO; + } + + + private void processSingleData(PanDataDTO panDataDTO) { + try { + String devCode = panDataDTO.getDeviceCode(); + if (ObjectUtil.isEmpty(devCode)) return; + List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); + String gas = panDataDTO.getDataValue(); + String attributeType = panDataDTO.getAttributeType(); + //暂只存浓度 + if ("2".equals(attributeType)) return; + String dataTime = panDataDTO.getDataTime(); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataPanGas.builder() + .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .deviceCode(devCode) + .concentration(gas) + .logtime(DateUtil.parseDateTime(dataTime)) + .build());//存储采集数据 + + boolean alarmFlag = false; + String bfcf = busDeviceService.getBfcf(devCode); + 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))) { +// dataTime = dataTime.replaceAll("-", ""); +// dataTime = dataTime.replaceAll(":", ""); +// dataTime = dataTime.replaceAll("\\s+", ""); + alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); + //7.更新监测井状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + log.error("处理云台数据时发生异常,devcode:{},data:{},e:{}", panDataDTO.getDeviceCode(), panDataDTO.toString(), e); + } + } + + +// @Transactional +// @Override +// public boolean processAcceptGasData(Map dataParams) { +// JSONObject jsonObject = new JSONObject(dataParams); +// JSONArray jsonArray = jsonObject.getJSONArray("data"); +// String devCode = ""; +// for (int i = 0; i < jsonArray.size(); i++) { +// try { +// devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); +// if (ObjectUtil.isEmpty(devCode)) continue; +// List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); +// String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); +// String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); +// //暂只存浓度 +// if ("2".equals(attributeType)) continue; +// String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); +// gas = String.format("%.2f", Double.valueOf(gas)); +// //1.存数据 +// save(DataPanGas.builder() +// .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") +// .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") +// .deviceCode(devCode) +// .concentration(gas) +// .logtime(DateUtil.parseDateTime(dataTime)) +// .build());//存储采集数据 +// //2.有无超限处理流程(判断最后一条数据) +//// if (i < jsonArray.size() - 1) continue; +// +// //3.清除设备告警 +//// alarmRecordsService.cancelDeviceAlarm(devCode); +// //4.存报警 +// //若没绑场站,则不产生报警 +// boolean alarmFlag = false; +// String bfcf = busDeviceService.getBfcf(devCode); +// 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))) { +//// dataTime = dataTime.replaceAll("-", ""); +//// dataTime = dataTime.replaceAll(":", ""); +//// dataTime = dataTime.replaceAll("\\s+", ""); +// alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); +// } +// break; +// } +// } +// } +// //5.清数据报警 +// if (!alarmFlag) { +// alarmRecordsService.cancelDataAlarm(devCode); +// } +// //6.更新电量及状态 (1:正常,2:报警) +// alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); +// //7.更新监测井状态 (1:正常,2:报警) +// if (busWellDTOList != null && busWellDTOList.size() > 0) { +// alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); +// } +// } catch (Exception e) { +// log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); +// } +// } +// return true; +// } + @Override public boolean acceptAlarmData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); 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 37d731d..a17953b 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataTubeOtherServiceImpl extends ServiceImpl implements IDataTubeOtherService, IDataAbstractService { @@ -73,7 +75,7 @@ } } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,7 +84,7 @@ imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -122,8 +124,8 @@ } //特殊处理消警 if ("CancelWaterImmersionAlarm".equals(alarmType)) { - if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { - alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + if (alarmRecordsService.isWatchAlarms(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelWatchAlarms(devCode, "WaterImmersionAlarm"); } continue; } @@ -146,8 +148,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmType)); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -227,8 +228,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java new file mode 100644 index 0000000..3be65dd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java @@ -0,0 +1,170 @@ +package com.casic.missiles.modular.aop; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.aop.annotion.ReflectionUtils; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.modular.interfaces.log.LogManager; +import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.Serializable; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Aspect +@Component +public class OperateLogAspect { + private Logger log = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private ApplicationContext applicationContext; + + public static volatile Map oldMap = new HashMap<>(); + + public OperateLogAspect() { + } + + @Pointcut("@annotation(com.casic.missiles.modular.aop.annotion.OperateLog)") + public void cutService() { + } + + @Around("cutService()") + public Object recordSysLog(ProceedingJoinPoint point) throws Throwable { + Object result = point.proceed(); + + try { + this.handle(point); + } catch (Exception var4) { + this.log.error("日志记录出错!", var4); + } + + return result; + } + + /** + * 处理请求前执行 + */ + @Before(value = "@annotation(operateLog)") + public void boBefore(JoinPoint joinPoint, OperateLog operateLog) { + Object info = joinPoint.getArgs()[0]; + if ("edit".equals(operateLog.type()) && operateLog.needDefaultCompare()) { + Class cls = operateLog.serviceClass(); + IService service = (IService) applicationContext.getBean(cls); + Object result; + if (service instanceof IBusDeviceService) { + result = ((IBusDeviceService) service).getByDeviceId((Long) ReflectionUtils.getFieldValue(info, "id")); + } else + result = service.getById((Serializable) ReflectionUtils.getFieldValue(info, "id")); + oldMap = (Map) objectToMap(result); // 存储修改前的对象 + } + } + + private void handle(ProceedingJoinPoint point) throws Exception { + Signature sig = point.getSignature(); + MethodSignature msig = null; + if (!(sig instanceof MethodSignature)) { + throw new IllegalArgumentException("该注解只能用于方法"); + } else { + msig = (MethodSignature) sig; + Object target = point.getTarget(); + Method currentMethod = target.getClass().getMethod(msig.getName(), msig.getParameterTypes()); + String methodName = currentMethod.getName(); + AuthUser user = ShiroKit.getUser(); + if (null != user) { + String className = point.getTarget().getClass().getName(); + Object[] params = point.getArgs(); + OperateLog annotation = (OperateLog) currentMethod.getAnnotation(OperateLog.class); + String bussinessName = annotation.value(); + String key = annotation.key(); + Class dictClass = annotation.dict(); + String sb = argsArrayToString(params); + String msg = sb; + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + if ("add".equals(annotation.type())) { + Map parameters = (Map) objectToMap(params[0]); + msg = CollectionUtils.isEmpty(parameters) ? sb : ReflectionUtils.parseMutiKey(dictMap, key, parameters); + } else if ("edit".equals(annotation.type())) { + msg = CollectionUtils.isEmpty(oldMap) ? sb : ReflectionUtils.contrastObj(dictClass, key, params[0], oldMap); + }else if("delete".equals(annotation.type())){ + msg=dictMap.get(annotation.key())+":"+ReflectionUtils.getDeleteKeys(params[0]); + } + LogManager.me().executeLog(LogTaskFactory.bussinessLog(user.getId(), bussinessName, className, methodName, msg)); + } + } + } + + + /** + * 参数拼装 + */ + private String argsArrayToString(Object[] paramsArray) { + Gson gson = new GsonBuilder().create(); + String params = ""; + if (paramsArray != null && paramsArray.length > 0) { + for (int i = 0; i < paramsArray.length; i++) { + if (!isFilterObject(paramsArray[i])) { + params += gson.toJson(paramsArray[i]) + " & "; + } + } + } + return params.trim(); + } + + + /** + * 判断是否需要过滤的对象。 + * + * @param o 对象信息。 + * @return 如果是需要过滤的对象,则返回true;否则返回false。 + */ + public boolean isFilterObject(final Object o) { + return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse; + } + + private Map objectToMap(Object obj) { + if (obj == null) { + return null; + } + ObjectMapper mapper = new ObjectMapper(); + mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + // 如果使用JPA请自己打开这条配置 + // mapper.addMixIn(Object.class, IgnoreHibernatePropertiesInJackson.class); + Map mappedObject = mapper.convertValue(obj, Map.class); + return mappedObject; + + + } +} + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java new file mode 100644 index 0000000..77afa9c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.aop.annotion; + +import java.lang.annotation.*; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.FIELD}) +@Documented +public @interface DataName { + String name() default ""; // 字段名称 + + /** + * 读取枚举内容转义表达式 (如: 0=男,1=女,2=未知) + */ + String readConverterExp() default ""; +} + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java new file mode 100644 index 0000000..f1f59ad --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.aop.annotion; + + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.common.constant.dictmap.base.SystemDict; + +import java.lang.annotation.*; + +@Inherited +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.METHOD}) +public @interface OperateLog { + String value() default ""; + + String key() default "id"; + + Class serviceClass() default IService.class; + + // 是否需要比较新旧数据 + boolean needDefaultCompare() default true; + + //操作类型 add update delete + String type() default "update"; + + Class dict() default SystemDict.class; +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java new file mode 100644 index 0000000..eb773ad --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java @@ -0,0 +1,328 @@ +package com.casic.missiles.modular.aop.annotion; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.modular.interfaces.dictmap.factory.DictFieldWrapperFactory; +import lombok.extern.slf4j.Slf4j; + +import java.beans.PropertyDescriptor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.*; + +import static com.casic.missiles.modular.interfaces.utils.Contrast.firstCharToLowerCase; +import static com.casic.missiles.modular.interfaces.utils.Contrast.firstCharToUpperCase; + +@Slf4j +public class ReflectionUtils { + + /** + * 直接读取对象属性值, 无视private/protected修饰符, 不经过getter函数. + * + * @param obj 读取的对象 + * @param fieldName 读取的列 + * @return 属性值 + */ + public static Object getFieldValue(final Object obj, final String fieldName) { + Field field = getAccessibleField(obj, fieldName); + if (field == null) { + throw new IllegalArgumentException("Could not find field [" + fieldName + "] on target [" + obj + "]"); + } + + Object result = null; + try { + result = field.get(obj); + } catch (IllegalAccessException e) { + log.error("不可能抛出的异常{}", e.getMessage()); + e.printStackTrace(); + } + return result; + } + + /** + * 循环向上转型, 获取对象的DeclaredField, 并强制设置为可访问.如向上转型到Object仍无法找到, 返回null. + * + * @param obj 查找的对象 + * @param fieldName 列名 + * @return 列 + */ + public static Field getAccessibleField(final Object obj, final String fieldName) { + for (Class superClass = obj.getClass(); superClass != Object.class; superClass = superClass.getSuperclass()) { + try { + Field field = superClass.getDeclaredField(fieldName); + makeAccessible(field); + return field; + } catch (NoSuchFieldException e) { // NOSONAR + // Field不在当前类定义,继续向上转型 + e.printStackTrace(); + continue; // new add + } + } + return null; + } + + /** + * 改变private/protected的成员变量为public,尽量不调用实际改动的语句,避免JDK的SecurityManager抱怨。 + * + * @param + */ + public static void makeAccessible(Field field) { + if ((!Modifier.isPublic(field.getModifiers()) || !Modifier.isPublic(field.getDeclaringClass().getModifiers()) || Modifier + .isFinal(field.getModifiers())) && !field.isAccessible()) { + field.setAccessible(true); + } + } + + /** + * 获取两个对象同名属性内容不相同的列表 + * + * @param class1 old对象 + * @param class2 new对象 + * @return 区别列表 + * @throws ClassNotFoundException 异常 + * @throws IllegalAccessException 异常 + */ + public static List> compareTwoClass(Object class1, Object class2) throws ClassNotFoundException, IllegalAccessException { + List> list = new ArrayList>(); + // 获取对象的class + Class clazz1 = class1.getClass(); + Class clazz2 = class2.getClass(); + // 获取对象的属性列表 + Field[] field1 = clazz1.getDeclaredFields(); + Field[] field2 = clazz2.getDeclaredFields(); + StringBuilder sb = new StringBuilder(); + // 遍历属性列表field1 + for (int i = 0; i < field1.length; i++) { + // 遍历属性列表field2 + for (int j = 0; j < field2.length; j++) { + // 如果field1[i]属性名与field2[j]属性名内容相同 + if (field1[i].getName().equals(field2[j].getName())) { + if (field1[i].getName().equals(field2[j].getName())) { + field1[i].setAccessible(true); + field2[j].setAccessible(true); + // 如果field1[i]属性值与field2[j]属性值内容不相同 + if (!compareTwo(field1[i].get(class1), field2[j].get(class2))) { + Map map2 = new HashMap(); + DataName name = field1[i].getAnnotation(DataName.class); + String fieldName = ""; + if (name != null) { + fieldName = name.name(); + } else { + fieldName = field1[i].getName(); + } + map2.put("name", fieldName); + map2.put("old", field1[i].get(class1)); + map2.put("new", field2[j].get(class2)); + list.add(map2); + } + break; + } + } + } + } + return list; + } + + /** + * 对比两个数据是否内容相同 + * + * @param object1 比较对象1 + * @param object2 比较对象2 + * @return boolean类型 + */ + public static boolean compareTwo(Object object1, Object object2) { + if (object1 == null && object2 == null) { + return true; + } + if (object1 == null && object2 != null) { + return false; + } + if (object1.equals(object2)) { + return true; + } + return false; + } + + public static String contrastObjByName(Class dictClass, String key, Object pojo1, Map pojo2) throws IllegalAccessException, InstantiationException { + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + String str = parseMutiKey(dictMap, key, pojo2) + ";;;"; + + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if (!"serialVersionUID".equals(field.getName())) { + String prefix = "get"; + int prefixLength = 3; + if (field.getType().getName().equals("java.lang.Boolean")) { + prefix = "is"; + prefixLength = 2; + } + + Method getMethod = null; + + try { + getMethod = clazz.getDeclaredMethod(prefix + firstCharToUpperCase(field.getName())); + } catch (NoSuchMethodException var22) { + System.err.println("this className:" + clazz.getName() + " is not methodName: " + var22.getMessage()); + continue; + } + + Object o1 = getMethod.invoke(pojo1); + Object o2 = pojo2.get(firstCharToLowerCase(getMethod.getName().substring(prefixLength))); + if (o1 != null && o2 != null) { + if (o1 instanceof Date) { + o1 = DateUtil.format(new Date(), "yyyy-MM-dd"); + } else if (o1 instanceof Integer) { + o2 = Integer.parseInt(o2.toString()); + } + + if (!o1.toString().equals(o2.toString())) { + if (i != 1) { + str = str + ";;;"; + } + + String fieldName = dictMap.get(field.getName()); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(field.getName()); + if (fieldWarpperMethodName != null) { + Object o1Warpper = DictFieldWrapperFactory.createFieldWrapper(o1, fieldWarpperMethodName); + Object o2Warpper = DictFieldWrapperFactory.createFieldWrapper(o2, fieldWarpperMethodName); + str = str + "字段名称:" + fieldName + ",旧值:" + o1Warpper + ",新值:" + o2Warpper; + } else { + str = str + "字段名称:" + fieldName + ",旧值:" + o1 + ",新值:" + o2; + } + + ++i; + } + } + } + } + } catch (Exception var23) { + var23.printStackTrace(); + } + + return str; + } + + public static String parseMutiKey(AbstractDictMap dictMap, String key, Map requests) { + StringBuilder sb = new StringBuilder(); + if (key.indexOf(",") != -1) { + String[] keys = key.split(","); + String[] var13 = keys; + int var14 = keys.length; + + for (int var7 = 0; var7 < var14; ++var7) { + String item = var13[var7].trim(); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(item); + Object value = requests.get(item); + if (fieldWarpperMethodName != null) { + Object valueWarpper = DictFieldWrapperFactory.createFieldWrapper(value, fieldWarpperMethodName); + sb.append(dictMap.get(item) + "=" + valueWarpper + ","); + } else { + sb.append(dictMap.get(item) + "=" + (ObjectUtil.isNotEmpty(value) ? value.toString() : "") + ","); + } + } + + return StrUtil.removeSuffix(sb.toString(), ","); + } else { + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(key); + Object value = requests.get(key); + if (fieldWarpperMethodName != null) { + Object valueWarpper = DictFieldWrapperFactory.createFieldWrapper(value, fieldWarpperMethodName); + sb.append(dictMap.get(key) + "=" + valueWarpper); + } else { + sb.append(dictMap.get(key) + "=" + (ObjectUtil.isNotEmpty(value) ? value.toString() : "")); + } + + return sb.toString(); + } + } + + public static String getDeleteKeys(Object pojo1) { + String str = ""; + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if ("keys".equals(field.getName())) { + PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); + Method getMethod = pd.getReadMethod(); + Object o1 = getMethod.invoke(pojo1); + return ObjectUtil.isNotEmpty(o1) ? o1.toString().replaceAll("\\[|]", "") : "".concat(",已删除"); + } + } + + } catch (Exception var21) { + var21.printStackTrace(); + } + return str; + } + + public static String contrastObj(Class dictClass, String key, Object pojo1, Map pojo2) throws IllegalAccessException, InstantiationException { + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); +// String str = parseMutiKey(dictMap, key, pojo2) + ";;;"; + String str = ""; + + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if (!"serialVersionUID".equals(field.getName())) { + PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); + Method getMethod = pd.getReadMethod(); + Object o1 = getMethod.invoke(pojo1); + Object o2 = pojo2.get(firstCharToLowerCase(getMethod.getName().substring(3))); + if (o1 != null && o2 != null) { + if (o1 instanceof Integer) { + o2 = Integer.parseInt(o2.toString()); + } else if (o1 instanceof Date) { + o1 = DateUtil.format((Date) o1, "yyyy-MM-dd HH:mm:ss"); + } + + if (!o1.toString().equals(o2.toString())) { + if (i != 1) { + str = str + ";"; + } + + String fieldName = dictMap.get(field.getName()); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(field.getName()); + if (fieldWarpperMethodName != null) { + Object o1Warpper = DictFieldWrapperFactory.createFieldWrapper(o1, fieldWarpperMethodName); + Object o2Warpper = DictFieldWrapperFactory.createFieldWrapper(o2, fieldWarpperMethodName); + str = str + fieldName + ":将【" + o1Warpper + "】,改为【" + o2Warpper + "】"; + } else { + str = str + fieldName + ":将【" + o1 + "】,改为【" + o2 + "】"; + } + + ++i; + } + } + } + } + } catch (Exception var21) { + var21.printStackTrace(); + } + + return str; + } + + +} \ No newline at end of file diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java index 7497ebf..18fd820 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java @@ -8,12 +8,14 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.StateDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.DeviceTypeDict; import com.casic.missiles.modular.device.dto.BaseDeviceTypeDTO; import com.casic.missiles.modular.device.dto.BaseDeviceTypeIdsDTO; import com.casic.missiles.modular.device.dto.SelectDTO; @@ -63,6 +65,7 @@ return ReturnUtil.success(super.packForBT(baseDeviceTypePage)); } + @OperateLog(value = "新增设备类型", key = "typeName,watchObject,isUsed,typeDescription", dict = DeviceTypeDict.class, type = "add") @ApiOperation("增加设备类型") @PostMapping("/add") @ResponseBody @@ -71,6 +74,7 @@ return ReturnUtil.success(iBaseDeviceTypeService.saveBaseDeviceType(baseDeviceType)); } + @OperateLog(value = "编辑设备类型", dict = DeviceTypeDict.class, serviceClass = IBaseDeviceTypeService.class, type = "edit") @ApiOperation("编辑设备类型") @PostMapping("/edit") @ResponseBody @@ -81,10 +85,11 @@ return ReturnUtil.success(iBaseDeviceTypeService.updateById(baseDeviceType)); } + @OperateLog(value = "删除设备类型", key = "typeName", dict = DeviceTypeDict.class, serviceClass = IBaseDeviceTypeService.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); @@ -113,7 +118,7 @@ public ReturnDTO selectList(@RequestBody BaseDeviceTypeIdsDTO request) { QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.in(request.getDeviceTypeList()!=null&&request.getDeviceTypeList().size()>0, "id", request.getDeviceTypeList()); + queryWrapper.in(request.getDeviceTypeList() != null && request.getDeviceTypeList().size() > 0, "id", request.getDeviceTypeList()); queryWrapper.eq("IS_USED", "1"); List baseDeviceTypes = iBaseDeviceTypeService.list(queryWrapper); List selectDTOS = new ArrayList<>(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java index 42d752d..54944e2 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java @@ -3,14 +3,15 @@ import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.IdDTO; -import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.ProductDict; import com.casic.missiles.modular.device.dto.BaseProductDTO; import com.casic.missiles.modular.device.dto.SelectProductDTO; import com.casic.missiles.modular.device.entity.BaseProduct; @@ -21,7 +22,6 @@ import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; -import java.util.List; import java.util.Objects; /** @@ -49,6 +49,7 @@ return ReturnUtil.success(super.packForBT(iBaseProductService.pageList(page, requestDTO))); } + @OperateLog(value = "新增产品", key = "productName,deviceType,deviceModel,manufacturerId,protocol,accessMethod,powerSupplyMode,dataService", dict = ProductDict.class, type = "add") @ApiOperation("新增") @PostMapping("/add") @ResponseBody @@ -58,6 +59,7 @@ } + @OperateLog(value = "编辑产品", dict = ProductDict.class, serviceClass = IBaseProductService.class, type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -68,10 +70,11 @@ return ReturnUtil.success(iBaseProductService.updateBaseProductById(baseProduct)); } + @OperateLog(value = "删除产品", key = "productName", dict = ProductDict.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 509bd7b..103acf2 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 @@ -9,6 +9,7 @@ import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; @@ -17,6 +18,7 @@ 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.aop.annotion.OperateLog; import com.casic.missiles.modular.device.dict.BusConfigDict; import com.casic.missiles.modular.device.dict.DeviceDict; import com.casic.missiles.modular.device.dto.*; @@ -65,7 +67,8 @@ } - @BussinessLog(value = "新增设备", key = "devcode,deviceName,deviceType,installDate,productId", dict = DeviceDict.class) + @OperateLog(value = "新增设备", key = "devcode,deviceType,productId," + + "valid,communicationType,simId,warrantyPeriod,tagNumber,leftLength,rightLength,", dict = DeviceDict.class,type = "add") @CacheEvict(value="busLedgersCache", key="#busDevice.getDevcode()") @ApiOperation("新增") @PostMapping("/add") @@ -75,7 +78,8 @@ } - @BussinessLog(value = "编辑设备", key = "devcode,deviceName,deviceType,installDate,productId", dict = DeviceDict.class) + @OperateLog(value = "编辑设备", key = "devcode,deviceType,installDate,productId," + + "leftLength,rightLength,communicationType,simId,warrantyPeriod", dict = DeviceDict.class,serviceClass = IBusDeviceService.class,type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -86,11 +90,12 @@ return ReturnUtil.success(iBusDeviceService.updateBusDevice(busDevice)); } + @OperateLog(value = "删除设备", key = "devcode", dict = DeviceDict.class,serviceClass = IBusDeviceService.class,type = "delete") @CacheEvict(value="busLedgersCache", allEntries = true) @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 31de56e..6f35acd 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 @@ -4,8 +4,8 @@ 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.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.page.PageFactory; @@ -16,11 +16,8 @@ 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.BusDeviceDTO; -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.BusDevice; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.CommonUtil; @@ -53,6 +50,7 @@ private final IBusLedgerPipeService iBusLedgerPipeService; private final IBaseExportService iBaseExportService; + private final AbstractDictService abstractDictService; @ApiOperation("新建点位") @PostMapping("/addPosition") @@ -60,10 +58,10 @@ 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,"安装位号已存!!!"); + if (busLedgerPipeList != null && busLedgerPipeList.size() > 0) { + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE, "安装位号已存!!!"); } - Long id =IdUtil.getSnowflake(1,2).nextId(); + Long id = IdUtil.getSnowflake(1, 2).nextId(); busLedgerPipe.setId(id); busLedgerPipe.setLedgerCode(busLedgerPipe.getTagNumber()); busLedgerPipe.setArea(CommonUtil.getAreaCode(busLedgerPipe.getPosition())); @@ -139,7 +137,11 @@ page.setCurrent(1); page.setSize(Integer.MAX_VALUE); Page devicePage = iBusLedgerPipeService.listPage(page, busLedgerPipeRequestDTO); + List records = devicePage.getRecords(); try { + for (BusLedgerPipe busLedgerPipe : records) { + busLedgerPipe.setLocationCategory(abstractDictService.getDictNameByCode("locationType", busLedgerPipe.getLocationCategory())); + } iBaseExportService.exportExcel(response, BusLedgerPipe.class, devicePage.getRecords(), ExportEnum.LEDGER_PIPE_EXPORT.getSheetName()); } catch (Exception e) { e.printStackTrace(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java index e87f3f8..8040c74 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java @@ -7,10 +7,13 @@ 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.DeletesDTO; import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.ProtocolDict; import com.casic.missiles.modular.device.dto.BusProtocolDTO; import com.casic.missiles.modular.device.entity.BusProtocol; import com.casic.missiles.modular.device.service.IBusProtocolService; @@ -35,10 +38,10 @@ @RestController @RequestMapping("/system/busProtocol") public class BusProtocolController extends ExportController { - + private final IBusProtocolService protocolService; - + @ApiOperation("查询分页接口") @PostMapping("/listPage") @ResponseBody @@ -47,9 +50,10 @@ queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getProtocolName()), "PROTOCOL_NAME", requestDTO.getProtocolName()); queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getProtocolCode()), "PROTOCOL_CODE", requestDTO.getProtocolCode()); Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(protocolService.page(page,queryWrapper))); + return ReturnUtil.success(super.packForBT(protocolService.page(page, queryWrapper))); } + @OperateLog(value = "新增协议", key = "protocolName,protocolCode,version,ip,description", dict = ProtocolDict.class, type = "add") @ApiOperation("新增") @PostMapping("/add") @ResponseBody @@ -58,6 +62,7 @@ return ReturnUtil.success(protocolService.save(busProtocol)); } + @OperateLog(value = "编辑协议", dict = ProtocolDict.class, serviceClass = IBusProtocolService.class, type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -68,10 +73,11 @@ return ReturnUtil.success(protocolService.updateById(busProtocol)); } + @OperateLog(value = "删除协议", key = "protocolName", dict = ProtocolDict.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 23ddee9..24c4712 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 @@ -2,7 +2,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.entity.BusDevice; import com.casic.missiles.util.InConditionDriver; @@ -46,27 +45,27 @@ @Param("orderColumn") String orderColumn, @Param("request") CommonRequestDTO request); - @Select("SELECT BFZT from bus_device where VALID=1 and DEVCODE= #{devcode} limit 1" ) - String getBfcf( @Param("devcode") String devcode); + @Select("SELECT BFZT from bus_device where VALID=1 and DEVCODE= #{devcode} limit 1") + String getBfcf(@Param("devcode") String devcode); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getMethaneData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getMethaneData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_tube_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getTubeOtherData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_tube_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getTubeOtherData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gasliquid_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getLGData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gasliquid_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getLGData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_monitor_pipe_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getMonitorPipeOtherData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_monitor_pipe_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getMonitorPipeOtherData(@Param("devcodes") List devcodes); - @Select("SELECT ALARM_THRESHOLD FROM `alarm_rule_device` where DEVCODE = #{devcode} order by ALARM_THRESHOLD asc " ) + @Select("SELECT ALARM_THRESHOLD FROM `alarm_rule_device` where DEVCODE = #{devcode} order by ALARM_THRESHOLD asc ") List getSpecialDeviceRule(@Param("devcode") String devcode); @Select(" select ar.ALARM_THRESHOLD from alarm_rule ar where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + @@ -81,4 +80,7 @@ "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") List getListByWellId(@Param("wellId") Long wellId); + + BusDeviceOperateLogDTO getByDeviceId(@Param("id") Long id); + } 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 8ba4b15..3109344 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 @@ -44,7 +44,7 @@ LEFT JOIN base_product bp ON bd.PRODUCT_ID = bp.ID LEFT JOIN bus_device_ledger br on br.DEVICE_ID = bd.ID AND br.VALID='1' LEFT JOIN bus_manufacturer bm on bm.ID = bp.MANUFACTURER_ID - LEFT JOIN bus_ledger_all_view bl on bl.ID = br.LEDGER_ID AND br.VALID='1' and bl.type = br.type + LEFT JOIN bus_ledger_all_view bl on bl.ID = br.LEDGER_ID AND bl.VALID='1' and bl.type = br.type where bd.valid>0 @@ -95,6 +95,32 @@ + + + SELECT - rd.*, - at.alarm_type, - bt.TYPE_NAME as devTypeName - FROM - alarm_records rd - LEFT JOIN bus_ledger_all_view lr ON lr.ledgerCode = rd.LEDGER_CODE - LEFT JOIN alarm_type at ON at.ID = rd.ALARM_TYPE_ID - LEFT JOIN bus_device bd ON bd.DEVCODE = rd.DEVCODE and bd.valid >0 - LEFT JOIN base_device_type bt ON bt.id = bd.DEVICE_TYPE + rd.*, + AT.alarm_type, + bt.TYPE_NAME AS devTypeName + FROM + alarm_records rd + LEFT JOIN bus_device bd ON bd.DEVCODE = rd.DEVCODE + AND bd.valid > 0 + LEFT JOIN bus_device_ledger bl ON bd.ID = bl.DEVICE_ID + AND bl.VALID = '1' + 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' + AND lr.ledgerCode = rd.LEDGER_CODE + LEFT JOIN alarm_type AT ON AT.ID = rd.ALARM_TYPE_ID + LEFT JOIN base_device_type bt ON bt.id = bd.DEVICE_TYPE where rd.STATUS ='1' and rd.EXCEPTION_TYPE='0' @@ -695,6 +705,7 @@ dt.LOGTIME, bv.tagNumber, bv.ledgerCode, + bv.ledgerName, bdt.TYPE_NAME, bv.place, bv.type, @@ -720,6 +731,7 @@ t.tagNumber, t.ledgerCode, t.TYPE_NAME, + t.ledgerName, t.OFF_DAYS, t.LOGTIME, t.place, diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml index 7aff0f0..a63dac1 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml @@ -25,34 +25,55 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java index 3e0edd6..9dab3a7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java @@ -71,4 +71,18 @@ private Long deptid; + @ApiModelProperty("经度") + private String lngGaode; + + @ApiModelProperty("纬度") + private String latGaode; + + @ApiModelProperty("监测类型") + private String watchObject; + + @ApiModelProperty("点位id") + private Long ledgerId; + + + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java index e938da8..60464c4 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java @@ -12,6 +12,7 @@ private String deviceType; private String tagNumber; private String ledgerCode; + private String ledgerName; private String place; //台账类型 private String type; 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 ac4cabe..e623df7 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 @@ -44,6 +44,7 @@ import static cn.hutool.core.date.DateUnit.DAY; import static com.casic.missiles.util.TimeConvertUtil.TimeConverter; +import static com.casic.missiles.util.TimeConvertUtil.TimeConverterSecond; /** *

@@ -180,8 +181,8 @@ public DeviceAlarmDetailDTO deviceAlarmDetail(Long id) { DeviceAlarmDetailDTO alarmDetail = this.baseMapper.deviceAlarmDetail(id); - alarmDetail.setCancelDuration(TimeConverter(alarmDetail.getCancelDuration())); - alarmDetail.setProcessDuration(TimeConverter(alarmDetail.getProcessDuration())); + alarmDetail.setCancelDuration(TimeConverterSecond(alarmDetail.getCancelDuration())); + alarmDetail.setProcessDuration(TimeConverterSecond(alarmDetail.getProcessDuration())); alarmDetail.setDeptName(ObjectUtil.isNotEmpty(alarmDetail.getDeptid()) ? commonServer.getDeptNamesByDeptId(alarmDetail.getDeptid()) : ""); // alarmDetail.setAddress(alarmDetail.getTagNumber().concat("|").concat(alarmDetail.getLedgerName())); alarmDetail.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmDetail.getAlarmCategory())); @@ -524,16 +525,26 @@ @Override public void cancelDeviceAlarm(String devCode) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("DEVCODE", devCode); - updateWrapper.eq("EXCEPTION_TYPE", "1"); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE", devCode); + queryWrapper.eq("EXCEPTION_TYPE", "1"); //只有挂起和已处置的才消 // updateWrapper.ge("PROCESS_STATUS", "3"); - updateWrapper.eq("STATUS", "1"); - updateWrapper.set("STATUS", "0"); - updateWrapper.set("CANCEL_TIME", new Date()); - this.update(updateWrapper); - //toDo:需要加流程取消日志 + queryWrapper.eq("STATUS", "1"); + List alarmRecordsList = this.list(queryWrapper); + if (alarmRecordsList != null && alarmRecordsList.size() > 0) { + alarmRecordsList.forEach(alarmRecords -> { + alarmRecords.setStatus("0"); + alarmRecords.setCancelTime(new Date()); + alarmRecords.setPreProcessStatus(alarmRecords.getProcessStatus()); + alarmRecords.setProcessStatus(ApprovalStatusEnum.FINISHED.getCode()); + this.updateById(alarmRecords); + }); + //添加流程日志 + approvalLogMapper.insert(new ApprovalLog(alarmRecordsList.get(0).getId(), "1", + "", ApprovalStatusEnum.FINISHED.getCode(), + null)); + } } @Override @@ -674,8 +685,12 @@ AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), data.concat("%LEL"), data, - alarmRuleResponseDTO.getAlarmLevelId(),DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmLevelId(), DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmRuleResponseDTO.getAlarmTypeName(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -721,7 +736,7 @@ @Override - public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime,List busWellDTOList, + public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime, List busWellDTOList, Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { @@ -730,8 +745,12 @@ try { AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, - alarmLevelId, DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmLevelId, DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmTypeName, + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace() + , "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -793,7 +812,11 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.get().getAlarmTypeId(), alarmRuleResponseDTO.get().getAlarmTypeName(), alarmRuleResponseDTO.get().getAlarmLevelId(), DateUtil.parse(logTime), - alarmRuleResponseDTO.get().getAlarmThreshold(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "1"); + alarmRuleResponseDTO.get().getAlarmThreshold(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "1"); this.save(alarmRecords); } catch (Exception e) { e.printStackTrace(); @@ -846,8 +869,8 @@ * @param cell */ @Override - public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent,String logTime) { - this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent,DateUtil.parse(logTime)); + public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent, String logTime) { + this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent, DateUtil.parse(logTime)); } @Override @@ -903,7 +926,10 @@ offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), - offDeviceDTO.getPlace(), "1"); + ObjectUtil.isNotEmpty(offDeviceDTO.getLedgerName()) ? + offDeviceDTO.getTagNumber().concat("|"). + concat(offDeviceDTO.getLedgerName()) : + offDeviceDTO.getPlace(), "1"); alarmRecordsList.add(alarmRecords); ledgers.add(offDeviceDTO); } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java new file mode 100644 index 0000000..cb554b9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.data.dto; + + +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class PanDataDTO implements Serializable { + + private static final long serialVersionUID = 1232822221212L; + + private String dataTime; + + private String attributeType; + + private String dataValue; + + private String deviceCode; + + + +} 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 index a082d00..2a943ad 100644 --- 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 @@ -23,6 +23,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -37,6 +38,7 @@ * @author zt * @since 2025-01-22 */ +@Slf4j @RequiredArgsConstructor @Service public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { @@ -71,8 +73,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -80,8 +81,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}",devCode, e); } } @@ -141,8 +141,7 @@ } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -222,8 +221,10 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); +// e.printStackTrace(); +// log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); + } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java index dd80611..cd24860 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java @@ -83,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -124,8 +123,7 @@ busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -200,8 +198,7 @@ alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } //低电量报警处理 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 302b446..f0def39 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 @@ -76,8 +76,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -85,8 +84,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -133,8 +131,7 @@ if (i < jsonArray.size() - 1) continue; busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -217,8 +214,7 @@ } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } 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 e5ba8f7..a02af88 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataMonitorPipeOtherServiceImpl extends ServiceImpl implements IDataMonitorPipeOtherService, IDataAbstractService { @@ -73,8 +75,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -116,8 +116,7 @@ //2.写入新的报警 alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + log.error("处理报警时发生异常,devcode:{},e:{}", devCode, e); } } } @@ -160,8 +159,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmEventCode)); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -341,8 +339,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag || ObjectUtil.isNotEmpty(alarmContent) ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java index 5dc8c2b..f383690 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java @@ -2,7 +2,6 @@ import cn.hutool.core.date.DateUtil; 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; @@ -13,15 +12,20 @@ import com.casic.missiles.modular.alarm.service.IAlarmRuleService; import com.casic.missiles.modular.data.dao.DataGasMapper; import com.casic.missiles.modular.data.dao.DataPanGasMapper; +import com.casic.missiles.modular.data.dto.PanDataDTO; import com.casic.missiles.modular.data.entity.DataPanGas; import com.casic.missiles.modular.data.service.IDataPanGasService; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.CommonUtil; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonToken; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.io.IOException; import java.util.Date; import java.util.List; import java.util.Map; @@ -68,78 +72,179 @@ } - @Transactional @Override public boolean processAcceptGasData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); - JSONArray jsonArray = jsonObject.getJSONArray("data"); - String devCode = ""; - for (int i = 0; i < jsonArray.size(); i++) { - try { - devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); - if (ObjectUtil.isEmpty(devCode)) continue; - List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); - String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); - String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); - //暂只存浓度 - if ("2".equals(attributeType)) continue; - String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); - gas = String.format("%.2f", Double.valueOf(gas)); - //1.存数据 - save(DataPanGas.builder() - .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") - .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") - .deviceCode(devCode) - .concentration(gas) - .logtime(DateUtil.parseDateTime(dataTime)) - .build());//存储采集数据 - //2.有无超限处理流程(判断最后一条数据) -// if (i < jsonArray.size() - 1) continue; - - //3.清除设备告警 - alarmRecordsService.cancelDeviceAlarm(devCode); - //4.存报警 - //若没绑场站,则不产生报警 - boolean alarmFlag = false; - String bfcf = busDeviceService.getBfcf(devCode); - 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))) { - dataTime = dataTime.replaceAll("-", ""); - dataTime = dataTime.replaceAll(":", ""); - dataTime = dataTime.replaceAll("\\s+", ""); - alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); - } - break; - } - } - } - //5.清数据报警 - if (!alarmFlag) { - alarmRecordsService.cancelDataAlarm(devCode); - } - //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); - //7.更新监测井状态 (1:正常,2:报警) - if (busWellDTOList != null && busWellDTOList.size() > 0) { - alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); - } - } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + JsonFactory factory = new JsonFactory(); + try (JsonParser parser = factory.createParser(jsonObject.getString("data"))) { + // 定位到 "data" 数组 + while (parser.nextToken() != JsonToken.START_ARRAY) { + parser.nextToken(); } + // 逐条处理数据 + while (parser.nextToken() != JsonToken.END_ARRAY) { + if (parser.getCurrentToken() == JsonToken.START_OBJECT) { + processSingleData(parseJsonObject(parser)); + } + + } + } catch (IOException e) { + e.printStackTrace(); } + return true; } + private PanDataDTO parseJsonObject(JsonParser parser) throws IOException { + PanDataDTO panDataDTO = new PanDataDTO(); + while (parser.nextToken() != JsonToken.END_OBJECT) { + String fieldName = parser.getCurrentName(); + if ("dataTime".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataTime(parser.getText()); + } else if ("attributeType".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setAttributeType(parser.getText()); + } else if ("dataValue".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataValue(parser.getText()); + } else if ("deviceCode".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDeviceCode(parser.getText()); + } + } + return panDataDTO; + } + + + private void processSingleData(PanDataDTO panDataDTO) { + try { + String devCode = panDataDTO.getDeviceCode(); + if (ObjectUtil.isEmpty(devCode)) return; + List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); + String gas = panDataDTO.getDataValue(); + String attributeType = panDataDTO.getAttributeType(); + //暂只存浓度 + if ("2".equals(attributeType)) return; + String dataTime = panDataDTO.getDataTime(); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataPanGas.builder() + .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .deviceCode(devCode) + .concentration(gas) + .logtime(DateUtil.parseDateTime(dataTime)) + .build());//存储采集数据 + + boolean alarmFlag = false; + String bfcf = busDeviceService.getBfcf(devCode); + 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))) { +// dataTime = dataTime.replaceAll("-", ""); +// dataTime = dataTime.replaceAll(":", ""); +// dataTime = dataTime.replaceAll("\\s+", ""); + alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); + //7.更新监测井状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + log.error("处理云台数据时发生异常,devcode:{},data:{},e:{}", panDataDTO.getDeviceCode(), panDataDTO.toString(), e); + } + } + + +// @Transactional +// @Override +// public boolean processAcceptGasData(Map dataParams) { +// JSONObject jsonObject = new JSONObject(dataParams); +// JSONArray jsonArray = jsonObject.getJSONArray("data"); +// String devCode = ""; +// for (int i = 0; i < jsonArray.size(); i++) { +// try { +// devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); +// if (ObjectUtil.isEmpty(devCode)) continue; +// List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); +// String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); +// String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); +// //暂只存浓度 +// if ("2".equals(attributeType)) continue; +// String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); +// gas = String.format("%.2f", Double.valueOf(gas)); +// //1.存数据 +// save(DataPanGas.builder() +// .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") +// .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") +// .deviceCode(devCode) +// .concentration(gas) +// .logtime(DateUtil.parseDateTime(dataTime)) +// .build());//存储采集数据 +// //2.有无超限处理流程(判断最后一条数据) +//// if (i < jsonArray.size() - 1) continue; +// +// //3.清除设备告警 +//// alarmRecordsService.cancelDeviceAlarm(devCode); +// //4.存报警 +// //若没绑场站,则不产生报警 +// boolean alarmFlag = false; +// String bfcf = busDeviceService.getBfcf(devCode); +// 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))) { +//// dataTime = dataTime.replaceAll("-", ""); +//// dataTime = dataTime.replaceAll(":", ""); +//// dataTime = dataTime.replaceAll("\\s+", ""); +// alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); +// } +// break; +// } +// } +// } +// //5.清数据报警 +// if (!alarmFlag) { +// alarmRecordsService.cancelDataAlarm(devCode); +// } +// //6.更新电量及状态 (1:正常,2:报警) +// alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); +// //7.更新监测井状态 (1:正常,2:报警) +// if (busWellDTOList != null && busWellDTOList.size() > 0) { +// alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); +// } +// } catch (Exception e) { +// log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); +// } +// } +// return true; +// } + @Override public boolean acceptAlarmData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); 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 37d731d..a17953b 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataTubeOtherServiceImpl extends ServiceImpl implements IDataTubeOtherService, IDataAbstractService { @@ -73,7 +75,7 @@ } } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,7 +84,7 @@ imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -122,8 +124,8 @@ } //特殊处理消警 if ("CancelWaterImmersionAlarm".equals(alarmType)) { - if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { - alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + if (alarmRecordsService.isWatchAlarms(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelWatchAlarms(devCode, "WaterImmersionAlarm"); } continue; } @@ -146,8 +148,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmType)); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -227,8 +228,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java new file mode 100644 index 0000000..3be65dd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java @@ -0,0 +1,170 @@ +package com.casic.missiles.modular.aop; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.aop.annotion.ReflectionUtils; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.modular.interfaces.log.LogManager; +import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.Serializable; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Aspect +@Component +public class OperateLogAspect { + private Logger log = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private ApplicationContext applicationContext; + + public static volatile Map oldMap = new HashMap<>(); + + public OperateLogAspect() { + } + + @Pointcut("@annotation(com.casic.missiles.modular.aop.annotion.OperateLog)") + public void cutService() { + } + + @Around("cutService()") + public Object recordSysLog(ProceedingJoinPoint point) throws Throwable { + Object result = point.proceed(); + + try { + this.handle(point); + } catch (Exception var4) { + this.log.error("日志记录出错!", var4); + } + + return result; + } + + /** + * 处理请求前执行 + */ + @Before(value = "@annotation(operateLog)") + public void boBefore(JoinPoint joinPoint, OperateLog operateLog) { + Object info = joinPoint.getArgs()[0]; + if ("edit".equals(operateLog.type()) && operateLog.needDefaultCompare()) { + Class cls = operateLog.serviceClass(); + IService service = (IService) applicationContext.getBean(cls); + Object result; + if (service instanceof IBusDeviceService) { + result = ((IBusDeviceService) service).getByDeviceId((Long) ReflectionUtils.getFieldValue(info, "id")); + } else + result = service.getById((Serializable) ReflectionUtils.getFieldValue(info, "id")); + oldMap = (Map) objectToMap(result); // 存储修改前的对象 + } + } + + private void handle(ProceedingJoinPoint point) throws Exception { + Signature sig = point.getSignature(); + MethodSignature msig = null; + if (!(sig instanceof MethodSignature)) { + throw new IllegalArgumentException("该注解只能用于方法"); + } else { + msig = (MethodSignature) sig; + Object target = point.getTarget(); + Method currentMethod = target.getClass().getMethod(msig.getName(), msig.getParameterTypes()); + String methodName = currentMethod.getName(); + AuthUser user = ShiroKit.getUser(); + if (null != user) { + String className = point.getTarget().getClass().getName(); + Object[] params = point.getArgs(); + OperateLog annotation = (OperateLog) currentMethod.getAnnotation(OperateLog.class); + String bussinessName = annotation.value(); + String key = annotation.key(); + Class dictClass = annotation.dict(); + String sb = argsArrayToString(params); + String msg = sb; + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + if ("add".equals(annotation.type())) { + Map parameters = (Map) objectToMap(params[0]); + msg = CollectionUtils.isEmpty(parameters) ? sb : ReflectionUtils.parseMutiKey(dictMap, key, parameters); + } else if ("edit".equals(annotation.type())) { + msg = CollectionUtils.isEmpty(oldMap) ? sb : ReflectionUtils.contrastObj(dictClass, key, params[0], oldMap); + }else if("delete".equals(annotation.type())){ + msg=dictMap.get(annotation.key())+":"+ReflectionUtils.getDeleteKeys(params[0]); + } + LogManager.me().executeLog(LogTaskFactory.bussinessLog(user.getId(), bussinessName, className, methodName, msg)); + } + } + } + + + /** + * 参数拼装 + */ + private String argsArrayToString(Object[] paramsArray) { + Gson gson = new GsonBuilder().create(); + String params = ""; + if (paramsArray != null && paramsArray.length > 0) { + for (int i = 0; i < paramsArray.length; i++) { + if (!isFilterObject(paramsArray[i])) { + params += gson.toJson(paramsArray[i]) + " & "; + } + } + } + return params.trim(); + } + + + /** + * 判断是否需要过滤的对象。 + * + * @param o 对象信息。 + * @return 如果是需要过滤的对象,则返回true;否则返回false。 + */ + public boolean isFilterObject(final Object o) { + return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse; + } + + private Map objectToMap(Object obj) { + if (obj == null) { + return null; + } + ObjectMapper mapper = new ObjectMapper(); + mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + // 如果使用JPA请自己打开这条配置 + // mapper.addMixIn(Object.class, IgnoreHibernatePropertiesInJackson.class); + Map mappedObject = mapper.convertValue(obj, Map.class); + return mappedObject; + + + } +} + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java new file mode 100644 index 0000000..77afa9c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.aop.annotion; + +import java.lang.annotation.*; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.FIELD}) +@Documented +public @interface DataName { + String name() default ""; // 字段名称 + + /** + * 读取枚举内容转义表达式 (如: 0=男,1=女,2=未知) + */ + String readConverterExp() default ""; +} + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java new file mode 100644 index 0000000..f1f59ad --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.aop.annotion; + + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.common.constant.dictmap.base.SystemDict; + +import java.lang.annotation.*; + +@Inherited +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.METHOD}) +public @interface OperateLog { + String value() default ""; + + String key() default "id"; + + Class serviceClass() default IService.class; + + // 是否需要比较新旧数据 + boolean needDefaultCompare() default true; + + //操作类型 add update delete + String type() default "update"; + + Class dict() default SystemDict.class; +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java new file mode 100644 index 0000000..eb773ad --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java @@ -0,0 +1,328 @@ +package com.casic.missiles.modular.aop.annotion; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.modular.interfaces.dictmap.factory.DictFieldWrapperFactory; +import lombok.extern.slf4j.Slf4j; + +import java.beans.PropertyDescriptor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.*; + +import static com.casic.missiles.modular.interfaces.utils.Contrast.firstCharToLowerCase; +import static com.casic.missiles.modular.interfaces.utils.Contrast.firstCharToUpperCase; + +@Slf4j +public class ReflectionUtils { + + /** + * 直接读取对象属性值, 无视private/protected修饰符, 不经过getter函数. + * + * @param obj 读取的对象 + * @param fieldName 读取的列 + * @return 属性值 + */ + public static Object getFieldValue(final Object obj, final String fieldName) { + Field field = getAccessibleField(obj, fieldName); + if (field == null) { + throw new IllegalArgumentException("Could not find field [" + fieldName + "] on target [" + obj + "]"); + } + + Object result = null; + try { + result = field.get(obj); + } catch (IllegalAccessException e) { + log.error("不可能抛出的异常{}", e.getMessage()); + e.printStackTrace(); + } + return result; + } + + /** + * 循环向上转型, 获取对象的DeclaredField, 并强制设置为可访问.如向上转型到Object仍无法找到, 返回null. + * + * @param obj 查找的对象 + * @param fieldName 列名 + * @return 列 + */ + public static Field getAccessibleField(final Object obj, final String fieldName) { + for (Class superClass = obj.getClass(); superClass != Object.class; superClass = superClass.getSuperclass()) { + try { + Field field = superClass.getDeclaredField(fieldName); + makeAccessible(field); + return field; + } catch (NoSuchFieldException e) { // NOSONAR + // Field不在当前类定义,继续向上转型 + e.printStackTrace(); + continue; // new add + } + } + return null; + } + + /** + * 改变private/protected的成员变量为public,尽量不调用实际改动的语句,避免JDK的SecurityManager抱怨。 + * + * @param + */ + public static void makeAccessible(Field field) { + if ((!Modifier.isPublic(field.getModifiers()) || !Modifier.isPublic(field.getDeclaringClass().getModifiers()) || Modifier + .isFinal(field.getModifiers())) && !field.isAccessible()) { + field.setAccessible(true); + } + } + + /** + * 获取两个对象同名属性内容不相同的列表 + * + * @param class1 old对象 + * @param class2 new对象 + * @return 区别列表 + * @throws ClassNotFoundException 异常 + * @throws IllegalAccessException 异常 + */ + public static List> compareTwoClass(Object class1, Object class2) throws ClassNotFoundException, IllegalAccessException { + List> list = new ArrayList>(); + // 获取对象的class + Class clazz1 = class1.getClass(); + Class clazz2 = class2.getClass(); + // 获取对象的属性列表 + Field[] field1 = clazz1.getDeclaredFields(); + Field[] field2 = clazz2.getDeclaredFields(); + StringBuilder sb = new StringBuilder(); + // 遍历属性列表field1 + for (int i = 0; i < field1.length; i++) { + // 遍历属性列表field2 + for (int j = 0; j < field2.length; j++) { + // 如果field1[i]属性名与field2[j]属性名内容相同 + if (field1[i].getName().equals(field2[j].getName())) { + if (field1[i].getName().equals(field2[j].getName())) { + field1[i].setAccessible(true); + field2[j].setAccessible(true); + // 如果field1[i]属性值与field2[j]属性值内容不相同 + if (!compareTwo(field1[i].get(class1), field2[j].get(class2))) { + Map map2 = new HashMap(); + DataName name = field1[i].getAnnotation(DataName.class); + String fieldName = ""; + if (name != null) { + fieldName = name.name(); + } else { + fieldName = field1[i].getName(); + } + map2.put("name", fieldName); + map2.put("old", field1[i].get(class1)); + map2.put("new", field2[j].get(class2)); + list.add(map2); + } + break; + } + } + } + } + return list; + } + + /** + * 对比两个数据是否内容相同 + * + * @param object1 比较对象1 + * @param object2 比较对象2 + * @return boolean类型 + */ + public static boolean compareTwo(Object object1, Object object2) { + if (object1 == null && object2 == null) { + return true; + } + if (object1 == null && object2 != null) { + return false; + } + if (object1.equals(object2)) { + return true; + } + return false; + } + + public static String contrastObjByName(Class dictClass, String key, Object pojo1, Map pojo2) throws IllegalAccessException, InstantiationException { + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + String str = parseMutiKey(dictMap, key, pojo2) + ";;;"; + + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if (!"serialVersionUID".equals(field.getName())) { + String prefix = "get"; + int prefixLength = 3; + if (field.getType().getName().equals("java.lang.Boolean")) { + prefix = "is"; + prefixLength = 2; + } + + Method getMethod = null; + + try { + getMethod = clazz.getDeclaredMethod(prefix + firstCharToUpperCase(field.getName())); + } catch (NoSuchMethodException var22) { + System.err.println("this className:" + clazz.getName() + " is not methodName: " + var22.getMessage()); + continue; + } + + Object o1 = getMethod.invoke(pojo1); + Object o2 = pojo2.get(firstCharToLowerCase(getMethod.getName().substring(prefixLength))); + if (o1 != null && o2 != null) { + if (o1 instanceof Date) { + o1 = DateUtil.format(new Date(), "yyyy-MM-dd"); + } else if (o1 instanceof Integer) { + o2 = Integer.parseInt(o2.toString()); + } + + if (!o1.toString().equals(o2.toString())) { + if (i != 1) { + str = str + ";;;"; + } + + String fieldName = dictMap.get(field.getName()); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(field.getName()); + if (fieldWarpperMethodName != null) { + Object o1Warpper = DictFieldWrapperFactory.createFieldWrapper(o1, fieldWarpperMethodName); + Object o2Warpper = DictFieldWrapperFactory.createFieldWrapper(o2, fieldWarpperMethodName); + str = str + "字段名称:" + fieldName + ",旧值:" + o1Warpper + ",新值:" + o2Warpper; + } else { + str = str + "字段名称:" + fieldName + ",旧值:" + o1 + ",新值:" + o2; + } + + ++i; + } + } + } + } + } catch (Exception var23) { + var23.printStackTrace(); + } + + return str; + } + + public static String parseMutiKey(AbstractDictMap dictMap, String key, Map requests) { + StringBuilder sb = new StringBuilder(); + if (key.indexOf(",") != -1) { + String[] keys = key.split(","); + String[] var13 = keys; + int var14 = keys.length; + + for (int var7 = 0; var7 < var14; ++var7) { + String item = var13[var7].trim(); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(item); + Object value = requests.get(item); + if (fieldWarpperMethodName != null) { + Object valueWarpper = DictFieldWrapperFactory.createFieldWrapper(value, fieldWarpperMethodName); + sb.append(dictMap.get(item) + "=" + valueWarpper + ","); + } else { + sb.append(dictMap.get(item) + "=" + (ObjectUtil.isNotEmpty(value) ? value.toString() : "") + ","); + } + } + + return StrUtil.removeSuffix(sb.toString(), ","); + } else { + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(key); + Object value = requests.get(key); + if (fieldWarpperMethodName != null) { + Object valueWarpper = DictFieldWrapperFactory.createFieldWrapper(value, fieldWarpperMethodName); + sb.append(dictMap.get(key) + "=" + valueWarpper); + } else { + sb.append(dictMap.get(key) + "=" + (ObjectUtil.isNotEmpty(value) ? value.toString() : "")); + } + + return sb.toString(); + } + } + + public static String getDeleteKeys(Object pojo1) { + String str = ""; + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if ("keys".equals(field.getName())) { + PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); + Method getMethod = pd.getReadMethod(); + Object o1 = getMethod.invoke(pojo1); + return ObjectUtil.isNotEmpty(o1) ? o1.toString().replaceAll("\\[|]", "") : "".concat(",已删除"); + } + } + + } catch (Exception var21) { + var21.printStackTrace(); + } + return str; + } + + public static String contrastObj(Class dictClass, String key, Object pojo1, Map pojo2) throws IllegalAccessException, InstantiationException { + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); +// String str = parseMutiKey(dictMap, key, pojo2) + ";;;"; + String str = ""; + + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if (!"serialVersionUID".equals(field.getName())) { + PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); + Method getMethod = pd.getReadMethod(); + Object o1 = getMethod.invoke(pojo1); + Object o2 = pojo2.get(firstCharToLowerCase(getMethod.getName().substring(3))); + if (o1 != null && o2 != null) { + if (o1 instanceof Integer) { + o2 = Integer.parseInt(o2.toString()); + } else if (o1 instanceof Date) { + o1 = DateUtil.format((Date) o1, "yyyy-MM-dd HH:mm:ss"); + } + + if (!o1.toString().equals(o2.toString())) { + if (i != 1) { + str = str + ";"; + } + + String fieldName = dictMap.get(field.getName()); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(field.getName()); + if (fieldWarpperMethodName != null) { + Object o1Warpper = DictFieldWrapperFactory.createFieldWrapper(o1, fieldWarpperMethodName); + Object o2Warpper = DictFieldWrapperFactory.createFieldWrapper(o2, fieldWarpperMethodName); + str = str + fieldName + ":将【" + o1Warpper + "】,改为【" + o2Warpper + "】"; + } else { + str = str + fieldName + ":将【" + o1 + "】,改为【" + o2 + "】"; + } + + ++i; + } + } + } + } + } catch (Exception var21) { + var21.printStackTrace(); + } + + return str; + } + + +} \ No newline at end of file diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java index 7497ebf..18fd820 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java @@ -8,12 +8,14 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.StateDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.DeviceTypeDict; import com.casic.missiles.modular.device.dto.BaseDeviceTypeDTO; import com.casic.missiles.modular.device.dto.BaseDeviceTypeIdsDTO; import com.casic.missiles.modular.device.dto.SelectDTO; @@ -63,6 +65,7 @@ return ReturnUtil.success(super.packForBT(baseDeviceTypePage)); } + @OperateLog(value = "新增设备类型", key = "typeName,watchObject,isUsed,typeDescription", dict = DeviceTypeDict.class, type = "add") @ApiOperation("增加设备类型") @PostMapping("/add") @ResponseBody @@ -71,6 +74,7 @@ return ReturnUtil.success(iBaseDeviceTypeService.saveBaseDeviceType(baseDeviceType)); } + @OperateLog(value = "编辑设备类型", dict = DeviceTypeDict.class, serviceClass = IBaseDeviceTypeService.class, type = "edit") @ApiOperation("编辑设备类型") @PostMapping("/edit") @ResponseBody @@ -81,10 +85,11 @@ return ReturnUtil.success(iBaseDeviceTypeService.updateById(baseDeviceType)); } + @OperateLog(value = "删除设备类型", key = "typeName", dict = DeviceTypeDict.class, serviceClass = IBaseDeviceTypeService.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); @@ -113,7 +118,7 @@ public ReturnDTO selectList(@RequestBody BaseDeviceTypeIdsDTO request) { QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.in(request.getDeviceTypeList()!=null&&request.getDeviceTypeList().size()>0, "id", request.getDeviceTypeList()); + queryWrapper.in(request.getDeviceTypeList() != null && request.getDeviceTypeList().size() > 0, "id", request.getDeviceTypeList()); queryWrapper.eq("IS_USED", "1"); List baseDeviceTypes = iBaseDeviceTypeService.list(queryWrapper); List selectDTOS = new ArrayList<>(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java index 42d752d..54944e2 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java @@ -3,14 +3,15 @@ import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.IdDTO; -import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.ProductDict; import com.casic.missiles.modular.device.dto.BaseProductDTO; import com.casic.missiles.modular.device.dto.SelectProductDTO; import com.casic.missiles.modular.device.entity.BaseProduct; @@ -21,7 +22,6 @@ import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; -import java.util.List; import java.util.Objects; /** @@ -49,6 +49,7 @@ return ReturnUtil.success(super.packForBT(iBaseProductService.pageList(page, requestDTO))); } + @OperateLog(value = "新增产品", key = "productName,deviceType,deviceModel,manufacturerId,protocol,accessMethod,powerSupplyMode,dataService", dict = ProductDict.class, type = "add") @ApiOperation("新增") @PostMapping("/add") @ResponseBody @@ -58,6 +59,7 @@ } + @OperateLog(value = "编辑产品", dict = ProductDict.class, serviceClass = IBaseProductService.class, type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -68,10 +70,11 @@ return ReturnUtil.success(iBaseProductService.updateBaseProductById(baseProduct)); } + @OperateLog(value = "删除产品", key = "productName", dict = ProductDict.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 509bd7b..103acf2 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 @@ -9,6 +9,7 @@ import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; @@ -17,6 +18,7 @@ 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.aop.annotion.OperateLog; import com.casic.missiles.modular.device.dict.BusConfigDict; import com.casic.missiles.modular.device.dict.DeviceDict; import com.casic.missiles.modular.device.dto.*; @@ -65,7 +67,8 @@ } - @BussinessLog(value = "新增设备", key = "devcode,deviceName,deviceType,installDate,productId", dict = DeviceDict.class) + @OperateLog(value = "新增设备", key = "devcode,deviceType,productId," + + "valid,communicationType,simId,warrantyPeriod,tagNumber,leftLength,rightLength,", dict = DeviceDict.class,type = "add") @CacheEvict(value="busLedgersCache", key="#busDevice.getDevcode()") @ApiOperation("新增") @PostMapping("/add") @@ -75,7 +78,8 @@ } - @BussinessLog(value = "编辑设备", key = "devcode,deviceName,deviceType,installDate,productId", dict = DeviceDict.class) + @OperateLog(value = "编辑设备", key = "devcode,deviceType,installDate,productId," + + "leftLength,rightLength,communicationType,simId,warrantyPeriod", dict = DeviceDict.class,serviceClass = IBusDeviceService.class,type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -86,11 +90,12 @@ return ReturnUtil.success(iBusDeviceService.updateBusDevice(busDevice)); } + @OperateLog(value = "删除设备", key = "devcode", dict = DeviceDict.class,serviceClass = IBusDeviceService.class,type = "delete") @CacheEvict(value="busLedgersCache", allEntries = true) @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 31de56e..6f35acd 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 @@ -4,8 +4,8 @@ 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.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.page.PageFactory; @@ -16,11 +16,8 @@ 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.BusDeviceDTO; -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.BusDevice; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.CommonUtil; @@ -53,6 +50,7 @@ private final IBusLedgerPipeService iBusLedgerPipeService; private final IBaseExportService iBaseExportService; + private final AbstractDictService abstractDictService; @ApiOperation("新建点位") @PostMapping("/addPosition") @@ -60,10 +58,10 @@ 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,"安装位号已存!!!"); + if (busLedgerPipeList != null && busLedgerPipeList.size() > 0) { + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE, "安装位号已存!!!"); } - Long id =IdUtil.getSnowflake(1,2).nextId(); + Long id = IdUtil.getSnowflake(1, 2).nextId(); busLedgerPipe.setId(id); busLedgerPipe.setLedgerCode(busLedgerPipe.getTagNumber()); busLedgerPipe.setArea(CommonUtil.getAreaCode(busLedgerPipe.getPosition())); @@ -139,7 +137,11 @@ page.setCurrent(1); page.setSize(Integer.MAX_VALUE); Page devicePage = iBusLedgerPipeService.listPage(page, busLedgerPipeRequestDTO); + List records = devicePage.getRecords(); try { + for (BusLedgerPipe busLedgerPipe : records) { + busLedgerPipe.setLocationCategory(abstractDictService.getDictNameByCode("locationType", busLedgerPipe.getLocationCategory())); + } iBaseExportService.exportExcel(response, BusLedgerPipe.class, devicePage.getRecords(), ExportEnum.LEDGER_PIPE_EXPORT.getSheetName()); } catch (Exception e) { e.printStackTrace(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java index e87f3f8..8040c74 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java @@ -7,10 +7,13 @@ 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.DeletesDTO; import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.ProtocolDict; import com.casic.missiles.modular.device.dto.BusProtocolDTO; import com.casic.missiles.modular.device.entity.BusProtocol; import com.casic.missiles.modular.device.service.IBusProtocolService; @@ -35,10 +38,10 @@ @RestController @RequestMapping("/system/busProtocol") public class BusProtocolController extends ExportController { - + private final IBusProtocolService protocolService; - + @ApiOperation("查询分页接口") @PostMapping("/listPage") @ResponseBody @@ -47,9 +50,10 @@ queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getProtocolName()), "PROTOCOL_NAME", requestDTO.getProtocolName()); queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getProtocolCode()), "PROTOCOL_CODE", requestDTO.getProtocolCode()); Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(protocolService.page(page,queryWrapper))); + return ReturnUtil.success(super.packForBT(protocolService.page(page, queryWrapper))); } + @OperateLog(value = "新增协议", key = "protocolName,protocolCode,version,ip,description", dict = ProtocolDict.class, type = "add") @ApiOperation("新增") @PostMapping("/add") @ResponseBody @@ -58,6 +62,7 @@ return ReturnUtil.success(protocolService.save(busProtocol)); } + @OperateLog(value = "编辑协议", dict = ProtocolDict.class, serviceClass = IBusProtocolService.class, type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -68,10 +73,11 @@ return ReturnUtil.success(protocolService.updateById(busProtocol)); } + @OperateLog(value = "删除协议", key = "protocolName", dict = ProtocolDict.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 23ddee9..24c4712 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 @@ -2,7 +2,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.entity.BusDevice; import com.casic.missiles.util.InConditionDriver; @@ -46,27 +45,27 @@ @Param("orderColumn") String orderColumn, @Param("request") CommonRequestDTO request); - @Select("SELECT BFZT from bus_device where VALID=1 and DEVCODE= #{devcode} limit 1" ) - String getBfcf( @Param("devcode") String devcode); + @Select("SELECT BFZT from bus_device where VALID=1 and DEVCODE= #{devcode} limit 1") + String getBfcf(@Param("devcode") String devcode); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getMethaneData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getMethaneData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_tube_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getTubeOtherData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_tube_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getTubeOtherData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gasliquid_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getLGData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gasliquid_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getLGData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_monitor_pipe_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getMonitorPipeOtherData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_monitor_pipe_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getMonitorPipeOtherData(@Param("devcodes") List devcodes); - @Select("SELECT ALARM_THRESHOLD FROM `alarm_rule_device` where DEVCODE = #{devcode} order by ALARM_THRESHOLD asc " ) + @Select("SELECT ALARM_THRESHOLD FROM `alarm_rule_device` where DEVCODE = #{devcode} order by ALARM_THRESHOLD asc ") List getSpecialDeviceRule(@Param("devcode") String devcode); @Select(" select ar.ALARM_THRESHOLD from alarm_rule ar where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + @@ -81,4 +80,7 @@ "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") List getListByWellId(@Param("wellId") Long wellId); + + BusDeviceOperateLogDTO getByDeviceId(@Param("id") Long id); + } 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 8ba4b15..3109344 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 @@ -44,7 +44,7 @@ LEFT JOIN base_product bp ON bd.PRODUCT_ID = bp.ID LEFT JOIN bus_device_ledger br on br.DEVICE_ID = bd.ID AND br.VALID='1' LEFT JOIN bus_manufacturer bm on bm.ID = bp.MANUFACTURER_ID - LEFT JOIN bus_ledger_all_view bl on bl.ID = br.LEDGER_ID AND br.VALID='1' and bl.type = br.type + LEFT JOIN bus_ledger_all_view bl on bl.ID = br.LEDGER_ID AND bl.VALID='1' and bl.type = br.type where bd.valid>0 @@ -95,6 +95,32 @@ + + + SELECT - rd.*, - at.alarm_type, - bt.TYPE_NAME as devTypeName - FROM - alarm_records rd - LEFT JOIN bus_ledger_all_view lr ON lr.ledgerCode = rd.LEDGER_CODE - LEFT JOIN alarm_type at ON at.ID = rd.ALARM_TYPE_ID - LEFT JOIN bus_device bd ON bd.DEVCODE = rd.DEVCODE and bd.valid >0 - LEFT JOIN base_device_type bt ON bt.id = bd.DEVICE_TYPE + rd.*, + AT.alarm_type, + bt.TYPE_NAME AS devTypeName + FROM + alarm_records rd + LEFT JOIN bus_device bd ON bd.DEVCODE = rd.DEVCODE + AND bd.valid > 0 + LEFT JOIN bus_device_ledger bl ON bd.ID = bl.DEVICE_ID + AND bl.VALID = '1' + 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' + AND lr.ledgerCode = rd.LEDGER_CODE + LEFT JOIN alarm_type AT ON AT.ID = rd.ALARM_TYPE_ID + LEFT JOIN base_device_type bt ON bt.id = bd.DEVICE_TYPE where rd.STATUS ='1' and rd.EXCEPTION_TYPE='0' @@ -695,6 +705,7 @@ dt.LOGTIME, bv.tagNumber, bv.ledgerCode, + bv.ledgerName, bdt.TYPE_NAME, bv.place, bv.type, @@ -720,6 +731,7 @@ t.tagNumber, t.ledgerCode, t.TYPE_NAME, + t.ledgerName, t.OFF_DAYS, t.LOGTIME, t.place, diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml index 7aff0f0..a63dac1 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml @@ -25,34 +25,55 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java index 3e0edd6..9dab3a7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java @@ -71,4 +71,18 @@ private Long deptid; + @ApiModelProperty("经度") + private String lngGaode; + + @ApiModelProperty("纬度") + private String latGaode; + + @ApiModelProperty("监测类型") + private String watchObject; + + @ApiModelProperty("点位id") + private Long ledgerId; + + + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java index e938da8..60464c4 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java @@ -12,6 +12,7 @@ private String deviceType; private String tagNumber; private String ledgerCode; + private String ledgerName; private String place; //台账类型 private String type; 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 ac4cabe..e623df7 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 @@ -44,6 +44,7 @@ import static cn.hutool.core.date.DateUnit.DAY; import static com.casic.missiles.util.TimeConvertUtil.TimeConverter; +import static com.casic.missiles.util.TimeConvertUtil.TimeConverterSecond; /** *

@@ -180,8 +181,8 @@ public DeviceAlarmDetailDTO deviceAlarmDetail(Long id) { DeviceAlarmDetailDTO alarmDetail = this.baseMapper.deviceAlarmDetail(id); - alarmDetail.setCancelDuration(TimeConverter(alarmDetail.getCancelDuration())); - alarmDetail.setProcessDuration(TimeConverter(alarmDetail.getProcessDuration())); + alarmDetail.setCancelDuration(TimeConverterSecond(alarmDetail.getCancelDuration())); + alarmDetail.setProcessDuration(TimeConverterSecond(alarmDetail.getProcessDuration())); alarmDetail.setDeptName(ObjectUtil.isNotEmpty(alarmDetail.getDeptid()) ? commonServer.getDeptNamesByDeptId(alarmDetail.getDeptid()) : ""); // alarmDetail.setAddress(alarmDetail.getTagNumber().concat("|").concat(alarmDetail.getLedgerName())); alarmDetail.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmDetail.getAlarmCategory())); @@ -524,16 +525,26 @@ @Override public void cancelDeviceAlarm(String devCode) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("DEVCODE", devCode); - updateWrapper.eq("EXCEPTION_TYPE", "1"); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE", devCode); + queryWrapper.eq("EXCEPTION_TYPE", "1"); //只有挂起和已处置的才消 // updateWrapper.ge("PROCESS_STATUS", "3"); - updateWrapper.eq("STATUS", "1"); - updateWrapper.set("STATUS", "0"); - updateWrapper.set("CANCEL_TIME", new Date()); - this.update(updateWrapper); - //toDo:需要加流程取消日志 + queryWrapper.eq("STATUS", "1"); + List alarmRecordsList = this.list(queryWrapper); + if (alarmRecordsList != null && alarmRecordsList.size() > 0) { + alarmRecordsList.forEach(alarmRecords -> { + alarmRecords.setStatus("0"); + alarmRecords.setCancelTime(new Date()); + alarmRecords.setPreProcessStatus(alarmRecords.getProcessStatus()); + alarmRecords.setProcessStatus(ApprovalStatusEnum.FINISHED.getCode()); + this.updateById(alarmRecords); + }); + //添加流程日志 + approvalLogMapper.insert(new ApprovalLog(alarmRecordsList.get(0).getId(), "1", + "", ApprovalStatusEnum.FINISHED.getCode(), + null)); + } } @Override @@ -674,8 +685,12 @@ AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), data.concat("%LEL"), data, - alarmRuleResponseDTO.getAlarmLevelId(),DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmLevelId(), DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmRuleResponseDTO.getAlarmTypeName(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -721,7 +736,7 @@ @Override - public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime,List busWellDTOList, + public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime, List busWellDTOList, Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { @@ -730,8 +745,12 @@ try { AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, - alarmLevelId, DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmLevelId, DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmTypeName, + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace() + , "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -793,7 +812,11 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.get().getAlarmTypeId(), alarmRuleResponseDTO.get().getAlarmTypeName(), alarmRuleResponseDTO.get().getAlarmLevelId(), DateUtil.parse(logTime), - alarmRuleResponseDTO.get().getAlarmThreshold(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "1"); + alarmRuleResponseDTO.get().getAlarmThreshold(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "1"); this.save(alarmRecords); } catch (Exception e) { e.printStackTrace(); @@ -846,8 +869,8 @@ * @param cell */ @Override - public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent,String logTime) { - this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent,DateUtil.parse(logTime)); + public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent, String logTime) { + this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent, DateUtil.parse(logTime)); } @Override @@ -903,7 +926,10 @@ offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), - offDeviceDTO.getPlace(), "1"); + ObjectUtil.isNotEmpty(offDeviceDTO.getLedgerName()) ? + offDeviceDTO.getTagNumber().concat("|"). + concat(offDeviceDTO.getLedgerName()) : + offDeviceDTO.getPlace(), "1"); alarmRecordsList.add(alarmRecords); ledgers.add(offDeviceDTO); } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java new file mode 100644 index 0000000..cb554b9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.data.dto; + + +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class PanDataDTO implements Serializable { + + private static final long serialVersionUID = 1232822221212L; + + private String dataTime; + + private String attributeType; + + private String dataValue; + + private String deviceCode; + + + +} 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 index a082d00..2a943ad 100644 --- 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 @@ -23,6 +23,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -37,6 +38,7 @@ * @author zt * @since 2025-01-22 */ +@Slf4j @RequiredArgsConstructor @Service public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { @@ -71,8 +73,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -80,8 +81,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}",devCode, e); } } @@ -141,8 +141,7 @@ } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -222,8 +221,10 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); +// e.printStackTrace(); +// log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); + } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java index dd80611..cd24860 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java @@ -83,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -124,8 +123,7 @@ busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -200,8 +198,7 @@ alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } //低电量报警处理 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 302b446..f0def39 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 @@ -76,8 +76,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -85,8 +84,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -133,8 +131,7 @@ if (i < jsonArray.size() - 1) continue; busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -217,8 +214,7 @@ } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } 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 e5ba8f7..a02af88 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataMonitorPipeOtherServiceImpl extends ServiceImpl implements IDataMonitorPipeOtherService, IDataAbstractService { @@ -73,8 +75,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -116,8 +116,7 @@ //2.写入新的报警 alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + log.error("处理报警时发生异常,devcode:{},e:{}", devCode, e); } } } @@ -160,8 +159,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmEventCode)); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -341,8 +339,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag || ObjectUtil.isNotEmpty(alarmContent) ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java index 5dc8c2b..f383690 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java @@ -2,7 +2,6 @@ import cn.hutool.core.date.DateUtil; 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; @@ -13,15 +12,20 @@ import com.casic.missiles.modular.alarm.service.IAlarmRuleService; import com.casic.missiles.modular.data.dao.DataGasMapper; import com.casic.missiles.modular.data.dao.DataPanGasMapper; +import com.casic.missiles.modular.data.dto.PanDataDTO; import com.casic.missiles.modular.data.entity.DataPanGas; import com.casic.missiles.modular.data.service.IDataPanGasService; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.CommonUtil; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonToken; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.io.IOException; import java.util.Date; import java.util.List; import java.util.Map; @@ -68,78 +72,179 @@ } - @Transactional @Override public boolean processAcceptGasData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); - JSONArray jsonArray = jsonObject.getJSONArray("data"); - String devCode = ""; - for (int i = 0; i < jsonArray.size(); i++) { - try { - devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); - if (ObjectUtil.isEmpty(devCode)) continue; - List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); - String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); - String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); - //暂只存浓度 - if ("2".equals(attributeType)) continue; - String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); - gas = String.format("%.2f", Double.valueOf(gas)); - //1.存数据 - save(DataPanGas.builder() - .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") - .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") - .deviceCode(devCode) - .concentration(gas) - .logtime(DateUtil.parseDateTime(dataTime)) - .build());//存储采集数据 - //2.有无超限处理流程(判断最后一条数据) -// if (i < jsonArray.size() - 1) continue; - - //3.清除设备告警 - alarmRecordsService.cancelDeviceAlarm(devCode); - //4.存报警 - //若没绑场站,则不产生报警 - boolean alarmFlag = false; - String bfcf = busDeviceService.getBfcf(devCode); - 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))) { - dataTime = dataTime.replaceAll("-", ""); - dataTime = dataTime.replaceAll(":", ""); - dataTime = dataTime.replaceAll("\\s+", ""); - alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); - } - break; - } - } - } - //5.清数据报警 - if (!alarmFlag) { - alarmRecordsService.cancelDataAlarm(devCode); - } - //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); - //7.更新监测井状态 (1:正常,2:报警) - if (busWellDTOList != null && busWellDTOList.size() > 0) { - alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); - } - } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + JsonFactory factory = new JsonFactory(); + try (JsonParser parser = factory.createParser(jsonObject.getString("data"))) { + // 定位到 "data" 数组 + while (parser.nextToken() != JsonToken.START_ARRAY) { + parser.nextToken(); } + // 逐条处理数据 + while (parser.nextToken() != JsonToken.END_ARRAY) { + if (parser.getCurrentToken() == JsonToken.START_OBJECT) { + processSingleData(parseJsonObject(parser)); + } + + } + } catch (IOException e) { + e.printStackTrace(); } + return true; } + private PanDataDTO parseJsonObject(JsonParser parser) throws IOException { + PanDataDTO panDataDTO = new PanDataDTO(); + while (parser.nextToken() != JsonToken.END_OBJECT) { + String fieldName = parser.getCurrentName(); + if ("dataTime".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataTime(parser.getText()); + } else if ("attributeType".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setAttributeType(parser.getText()); + } else if ("dataValue".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataValue(parser.getText()); + } else if ("deviceCode".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDeviceCode(parser.getText()); + } + } + return panDataDTO; + } + + + private void processSingleData(PanDataDTO panDataDTO) { + try { + String devCode = panDataDTO.getDeviceCode(); + if (ObjectUtil.isEmpty(devCode)) return; + List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); + String gas = panDataDTO.getDataValue(); + String attributeType = panDataDTO.getAttributeType(); + //暂只存浓度 + if ("2".equals(attributeType)) return; + String dataTime = panDataDTO.getDataTime(); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataPanGas.builder() + .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .deviceCode(devCode) + .concentration(gas) + .logtime(DateUtil.parseDateTime(dataTime)) + .build());//存储采集数据 + + boolean alarmFlag = false; + String bfcf = busDeviceService.getBfcf(devCode); + 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))) { +// dataTime = dataTime.replaceAll("-", ""); +// dataTime = dataTime.replaceAll(":", ""); +// dataTime = dataTime.replaceAll("\\s+", ""); + alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); + //7.更新监测井状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + log.error("处理云台数据时发生异常,devcode:{},data:{},e:{}", panDataDTO.getDeviceCode(), panDataDTO.toString(), e); + } + } + + +// @Transactional +// @Override +// public boolean processAcceptGasData(Map dataParams) { +// JSONObject jsonObject = new JSONObject(dataParams); +// JSONArray jsonArray = jsonObject.getJSONArray("data"); +// String devCode = ""; +// for (int i = 0; i < jsonArray.size(); i++) { +// try { +// devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); +// if (ObjectUtil.isEmpty(devCode)) continue; +// List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); +// String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); +// String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); +// //暂只存浓度 +// if ("2".equals(attributeType)) continue; +// String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); +// gas = String.format("%.2f", Double.valueOf(gas)); +// //1.存数据 +// save(DataPanGas.builder() +// .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") +// .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") +// .deviceCode(devCode) +// .concentration(gas) +// .logtime(DateUtil.parseDateTime(dataTime)) +// .build());//存储采集数据 +// //2.有无超限处理流程(判断最后一条数据) +//// if (i < jsonArray.size() - 1) continue; +// +// //3.清除设备告警 +//// alarmRecordsService.cancelDeviceAlarm(devCode); +// //4.存报警 +// //若没绑场站,则不产生报警 +// boolean alarmFlag = false; +// String bfcf = busDeviceService.getBfcf(devCode); +// 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))) { +//// dataTime = dataTime.replaceAll("-", ""); +//// dataTime = dataTime.replaceAll(":", ""); +//// dataTime = dataTime.replaceAll("\\s+", ""); +// alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); +// } +// break; +// } +// } +// } +// //5.清数据报警 +// if (!alarmFlag) { +// alarmRecordsService.cancelDataAlarm(devCode); +// } +// //6.更新电量及状态 (1:正常,2:报警) +// alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); +// //7.更新监测井状态 (1:正常,2:报警) +// if (busWellDTOList != null && busWellDTOList.size() > 0) { +// alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); +// } +// } catch (Exception e) { +// log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); +// } +// } +// return true; +// } + @Override public boolean acceptAlarmData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); 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 37d731d..a17953b 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataTubeOtherServiceImpl extends ServiceImpl implements IDataTubeOtherService, IDataAbstractService { @@ -73,7 +75,7 @@ } } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,7 +84,7 @@ imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -122,8 +124,8 @@ } //特殊处理消警 if ("CancelWaterImmersionAlarm".equals(alarmType)) { - if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { - alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + if (alarmRecordsService.isWatchAlarms(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelWatchAlarms(devCode, "WaterImmersionAlarm"); } continue; } @@ -146,8 +148,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmType)); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -227,8 +228,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java new file mode 100644 index 0000000..3be65dd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java @@ -0,0 +1,170 @@ +package com.casic.missiles.modular.aop; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.aop.annotion.ReflectionUtils; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.modular.interfaces.log.LogManager; +import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.Serializable; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Aspect +@Component +public class OperateLogAspect { + private Logger log = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private ApplicationContext applicationContext; + + public static volatile Map oldMap = new HashMap<>(); + + public OperateLogAspect() { + } + + @Pointcut("@annotation(com.casic.missiles.modular.aop.annotion.OperateLog)") + public void cutService() { + } + + @Around("cutService()") + public Object recordSysLog(ProceedingJoinPoint point) throws Throwable { + Object result = point.proceed(); + + try { + this.handle(point); + } catch (Exception var4) { + this.log.error("日志记录出错!", var4); + } + + return result; + } + + /** + * 处理请求前执行 + */ + @Before(value = "@annotation(operateLog)") + public void boBefore(JoinPoint joinPoint, OperateLog operateLog) { + Object info = joinPoint.getArgs()[0]; + if ("edit".equals(operateLog.type()) && operateLog.needDefaultCompare()) { + Class cls = operateLog.serviceClass(); + IService service = (IService) applicationContext.getBean(cls); + Object result; + if (service instanceof IBusDeviceService) { + result = ((IBusDeviceService) service).getByDeviceId((Long) ReflectionUtils.getFieldValue(info, "id")); + } else + result = service.getById((Serializable) ReflectionUtils.getFieldValue(info, "id")); + oldMap = (Map) objectToMap(result); // 存储修改前的对象 + } + } + + private void handle(ProceedingJoinPoint point) throws Exception { + Signature sig = point.getSignature(); + MethodSignature msig = null; + if (!(sig instanceof MethodSignature)) { + throw new IllegalArgumentException("该注解只能用于方法"); + } else { + msig = (MethodSignature) sig; + Object target = point.getTarget(); + Method currentMethod = target.getClass().getMethod(msig.getName(), msig.getParameterTypes()); + String methodName = currentMethod.getName(); + AuthUser user = ShiroKit.getUser(); + if (null != user) { + String className = point.getTarget().getClass().getName(); + Object[] params = point.getArgs(); + OperateLog annotation = (OperateLog) currentMethod.getAnnotation(OperateLog.class); + String bussinessName = annotation.value(); + String key = annotation.key(); + Class dictClass = annotation.dict(); + String sb = argsArrayToString(params); + String msg = sb; + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + if ("add".equals(annotation.type())) { + Map parameters = (Map) objectToMap(params[0]); + msg = CollectionUtils.isEmpty(parameters) ? sb : ReflectionUtils.parseMutiKey(dictMap, key, parameters); + } else if ("edit".equals(annotation.type())) { + msg = CollectionUtils.isEmpty(oldMap) ? sb : ReflectionUtils.contrastObj(dictClass, key, params[0], oldMap); + }else if("delete".equals(annotation.type())){ + msg=dictMap.get(annotation.key())+":"+ReflectionUtils.getDeleteKeys(params[0]); + } + LogManager.me().executeLog(LogTaskFactory.bussinessLog(user.getId(), bussinessName, className, methodName, msg)); + } + } + } + + + /** + * 参数拼装 + */ + private String argsArrayToString(Object[] paramsArray) { + Gson gson = new GsonBuilder().create(); + String params = ""; + if (paramsArray != null && paramsArray.length > 0) { + for (int i = 0; i < paramsArray.length; i++) { + if (!isFilterObject(paramsArray[i])) { + params += gson.toJson(paramsArray[i]) + " & "; + } + } + } + return params.trim(); + } + + + /** + * 判断是否需要过滤的对象。 + * + * @param o 对象信息。 + * @return 如果是需要过滤的对象,则返回true;否则返回false。 + */ + public boolean isFilterObject(final Object o) { + return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse; + } + + private Map objectToMap(Object obj) { + if (obj == null) { + return null; + } + ObjectMapper mapper = new ObjectMapper(); + mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + // 如果使用JPA请自己打开这条配置 + // mapper.addMixIn(Object.class, IgnoreHibernatePropertiesInJackson.class); + Map mappedObject = mapper.convertValue(obj, Map.class); + return mappedObject; + + + } +} + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java new file mode 100644 index 0000000..77afa9c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.aop.annotion; + +import java.lang.annotation.*; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.FIELD}) +@Documented +public @interface DataName { + String name() default ""; // 字段名称 + + /** + * 读取枚举内容转义表达式 (如: 0=男,1=女,2=未知) + */ + String readConverterExp() default ""; +} + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java new file mode 100644 index 0000000..f1f59ad --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.aop.annotion; + + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.common.constant.dictmap.base.SystemDict; + +import java.lang.annotation.*; + +@Inherited +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.METHOD}) +public @interface OperateLog { + String value() default ""; + + String key() default "id"; + + Class serviceClass() default IService.class; + + // 是否需要比较新旧数据 + boolean needDefaultCompare() default true; + + //操作类型 add update delete + String type() default "update"; + + Class dict() default SystemDict.class; +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java new file mode 100644 index 0000000..eb773ad --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java @@ -0,0 +1,328 @@ +package com.casic.missiles.modular.aop.annotion; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.modular.interfaces.dictmap.factory.DictFieldWrapperFactory; +import lombok.extern.slf4j.Slf4j; + +import java.beans.PropertyDescriptor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.*; + +import static com.casic.missiles.modular.interfaces.utils.Contrast.firstCharToLowerCase; +import static com.casic.missiles.modular.interfaces.utils.Contrast.firstCharToUpperCase; + +@Slf4j +public class ReflectionUtils { + + /** + * 直接读取对象属性值, 无视private/protected修饰符, 不经过getter函数. + * + * @param obj 读取的对象 + * @param fieldName 读取的列 + * @return 属性值 + */ + public static Object getFieldValue(final Object obj, final String fieldName) { + Field field = getAccessibleField(obj, fieldName); + if (field == null) { + throw new IllegalArgumentException("Could not find field [" + fieldName + "] on target [" + obj + "]"); + } + + Object result = null; + try { + result = field.get(obj); + } catch (IllegalAccessException e) { + log.error("不可能抛出的异常{}", e.getMessage()); + e.printStackTrace(); + } + return result; + } + + /** + * 循环向上转型, 获取对象的DeclaredField, 并强制设置为可访问.如向上转型到Object仍无法找到, 返回null. + * + * @param obj 查找的对象 + * @param fieldName 列名 + * @return 列 + */ + public static Field getAccessibleField(final Object obj, final String fieldName) { + for (Class superClass = obj.getClass(); superClass != Object.class; superClass = superClass.getSuperclass()) { + try { + Field field = superClass.getDeclaredField(fieldName); + makeAccessible(field); + return field; + } catch (NoSuchFieldException e) { // NOSONAR + // Field不在当前类定义,继续向上转型 + e.printStackTrace(); + continue; // new add + } + } + return null; + } + + /** + * 改变private/protected的成员变量为public,尽量不调用实际改动的语句,避免JDK的SecurityManager抱怨。 + * + * @param + */ + public static void makeAccessible(Field field) { + if ((!Modifier.isPublic(field.getModifiers()) || !Modifier.isPublic(field.getDeclaringClass().getModifiers()) || Modifier + .isFinal(field.getModifiers())) && !field.isAccessible()) { + field.setAccessible(true); + } + } + + /** + * 获取两个对象同名属性内容不相同的列表 + * + * @param class1 old对象 + * @param class2 new对象 + * @return 区别列表 + * @throws ClassNotFoundException 异常 + * @throws IllegalAccessException 异常 + */ + public static List> compareTwoClass(Object class1, Object class2) throws ClassNotFoundException, IllegalAccessException { + List> list = new ArrayList>(); + // 获取对象的class + Class clazz1 = class1.getClass(); + Class clazz2 = class2.getClass(); + // 获取对象的属性列表 + Field[] field1 = clazz1.getDeclaredFields(); + Field[] field2 = clazz2.getDeclaredFields(); + StringBuilder sb = new StringBuilder(); + // 遍历属性列表field1 + for (int i = 0; i < field1.length; i++) { + // 遍历属性列表field2 + for (int j = 0; j < field2.length; j++) { + // 如果field1[i]属性名与field2[j]属性名内容相同 + if (field1[i].getName().equals(field2[j].getName())) { + if (field1[i].getName().equals(field2[j].getName())) { + field1[i].setAccessible(true); + field2[j].setAccessible(true); + // 如果field1[i]属性值与field2[j]属性值内容不相同 + if (!compareTwo(field1[i].get(class1), field2[j].get(class2))) { + Map map2 = new HashMap(); + DataName name = field1[i].getAnnotation(DataName.class); + String fieldName = ""; + if (name != null) { + fieldName = name.name(); + } else { + fieldName = field1[i].getName(); + } + map2.put("name", fieldName); + map2.put("old", field1[i].get(class1)); + map2.put("new", field2[j].get(class2)); + list.add(map2); + } + break; + } + } + } + } + return list; + } + + /** + * 对比两个数据是否内容相同 + * + * @param object1 比较对象1 + * @param object2 比较对象2 + * @return boolean类型 + */ + public static boolean compareTwo(Object object1, Object object2) { + if (object1 == null && object2 == null) { + return true; + } + if (object1 == null && object2 != null) { + return false; + } + if (object1.equals(object2)) { + return true; + } + return false; + } + + public static String contrastObjByName(Class dictClass, String key, Object pojo1, Map pojo2) throws IllegalAccessException, InstantiationException { + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + String str = parseMutiKey(dictMap, key, pojo2) + ";;;"; + + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if (!"serialVersionUID".equals(field.getName())) { + String prefix = "get"; + int prefixLength = 3; + if (field.getType().getName().equals("java.lang.Boolean")) { + prefix = "is"; + prefixLength = 2; + } + + Method getMethod = null; + + try { + getMethod = clazz.getDeclaredMethod(prefix + firstCharToUpperCase(field.getName())); + } catch (NoSuchMethodException var22) { + System.err.println("this className:" + clazz.getName() + " is not methodName: " + var22.getMessage()); + continue; + } + + Object o1 = getMethod.invoke(pojo1); + Object o2 = pojo2.get(firstCharToLowerCase(getMethod.getName().substring(prefixLength))); + if (o1 != null && o2 != null) { + if (o1 instanceof Date) { + o1 = DateUtil.format(new Date(), "yyyy-MM-dd"); + } else if (o1 instanceof Integer) { + o2 = Integer.parseInt(o2.toString()); + } + + if (!o1.toString().equals(o2.toString())) { + if (i != 1) { + str = str + ";;;"; + } + + String fieldName = dictMap.get(field.getName()); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(field.getName()); + if (fieldWarpperMethodName != null) { + Object o1Warpper = DictFieldWrapperFactory.createFieldWrapper(o1, fieldWarpperMethodName); + Object o2Warpper = DictFieldWrapperFactory.createFieldWrapper(o2, fieldWarpperMethodName); + str = str + "字段名称:" + fieldName + ",旧值:" + o1Warpper + ",新值:" + o2Warpper; + } else { + str = str + "字段名称:" + fieldName + ",旧值:" + o1 + ",新值:" + o2; + } + + ++i; + } + } + } + } + } catch (Exception var23) { + var23.printStackTrace(); + } + + return str; + } + + public static String parseMutiKey(AbstractDictMap dictMap, String key, Map requests) { + StringBuilder sb = new StringBuilder(); + if (key.indexOf(",") != -1) { + String[] keys = key.split(","); + String[] var13 = keys; + int var14 = keys.length; + + for (int var7 = 0; var7 < var14; ++var7) { + String item = var13[var7].trim(); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(item); + Object value = requests.get(item); + if (fieldWarpperMethodName != null) { + Object valueWarpper = DictFieldWrapperFactory.createFieldWrapper(value, fieldWarpperMethodName); + sb.append(dictMap.get(item) + "=" + valueWarpper + ","); + } else { + sb.append(dictMap.get(item) + "=" + (ObjectUtil.isNotEmpty(value) ? value.toString() : "") + ","); + } + } + + return StrUtil.removeSuffix(sb.toString(), ","); + } else { + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(key); + Object value = requests.get(key); + if (fieldWarpperMethodName != null) { + Object valueWarpper = DictFieldWrapperFactory.createFieldWrapper(value, fieldWarpperMethodName); + sb.append(dictMap.get(key) + "=" + valueWarpper); + } else { + sb.append(dictMap.get(key) + "=" + (ObjectUtil.isNotEmpty(value) ? value.toString() : "")); + } + + return sb.toString(); + } + } + + public static String getDeleteKeys(Object pojo1) { + String str = ""; + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if ("keys".equals(field.getName())) { + PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); + Method getMethod = pd.getReadMethod(); + Object o1 = getMethod.invoke(pojo1); + return ObjectUtil.isNotEmpty(o1) ? o1.toString().replaceAll("\\[|]", "") : "".concat(",已删除"); + } + } + + } catch (Exception var21) { + var21.printStackTrace(); + } + return str; + } + + public static String contrastObj(Class dictClass, String key, Object pojo1, Map pojo2) throws IllegalAccessException, InstantiationException { + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); +// String str = parseMutiKey(dictMap, key, pojo2) + ";;;"; + String str = ""; + + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if (!"serialVersionUID".equals(field.getName())) { + PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); + Method getMethod = pd.getReadMethod(); + Object o1 = getMethod.invoke(pojo1); + Object o2 = pojo2.get(firstCharToLowerCase(getMethod.getName().substring(3))); + if (o1 != null && o2 != null) { + if (o1 instanceof Integer) { + o2 = Integer.parseInt(o2.toString()); + } else if (o1 instanceof Date) { + o1 = DateUtil.format((Date) o1, "yyyy-MM-dd HH:mm:ss"); + } + + if (!o1.toString().equals(o2.toString())) { + if (i != 1) { + str = str + ";"; + } + + String fieldName = dictMap.get(field.getName()); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(field.getName()); + if (fieldWarpperMethodName != null) { + Object o1Warpper = DictFieldWrapperFactory.createFieldWrapper(o1, fieldWarpperMethodName); + Object o2Warpper = DictFieldWrapperFactory.createFieldWrapper(o2, fieldWarpperMethodName); + str = str + fieldName + ":将【" + o1Warpper + "】,改为【" + o2Warpper + "】"; + } else { + str = str + fieldName + ":将【" + o1 + "】,改为【" + o2 + "】"; + } + + ++i; + } + } + } + } + } catch (Exception var21) { + var21.printStackTrace(); + } + + return str; + } + + +} \ No newline at end of file diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java index 7497ebf..18fd820 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java @@ -8,12 +8,14 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.StateDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.DeviceTypeDict; import com.casic.missiles.modular.device.dto.BaseDeviceTypeDTO; import com.casic.missiles.modular.device.dto.BaseDeviceTypeIdsDTO; import com.casic.missiles.modular.device.dto.SelectDTO; @@ -63,6 +65,7 @@ return ReturnUtil.success(super.packForBT(baseDeviceTypePage)); } + @OperateLog(value = "新增设备类型", key = "typeName,watchObject,isUsed,typeDescription", dict = DeviceTypeDict.class, type = "add") @ApiOperation("增加设备类型") @PostMapping("/add") @ResponseBody @@ -71,6 +74,7 @@ return ReturnUtil.success(iBaseDeviceTypeService.saveBaseDeviceType(baseDeviceType)); } + @OperateLog(value = "编辑设备类型", dict = DeviceTypeDict.class, serviceClass = IBaseDeviceTypeService.class, type = "edit") @ApiOperation("编辑设备类型") @PostMapping("/edit") @ResponseBody @@ -81,10 +85,11 @@ return ReturnUtil.success(iBaseDeviceTypeService.updateById(baseDeviceType)); } + @OperateLog(value = "删除设备类型", key = "typeName", dict = DeviceTypeDict.class, serviceClass = IBaseDeviceTypeService.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); @@ -113,7 +118,7 @@ public ReturnDTO selectList(@RequestBody BaseDeviceTypeIdsDTO request) { QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.in(request.getDeviceTypeList()!=null&&request.getDeviceTypeList().size()>0, "id", request.getDeviceTypeList()); + queryWrapper.in(request.getDeviceTypeList() != null && request.getDeviceTypeList().size() > 0, "id", request.getDeviceTypeList()); queryWrapper.eq("IS_USED", "1"); List baseDeviceTypes = iBaseDeviceTypeService.list(queryWrapper); List selectDTOS = new ArrayList<>(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java index 42d752d..54944e2 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java @@ -3,14 +3,15 @@ import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.IdDTO; -import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.ProductDict; import com.casic.missiles.modular.device.dto.BaseProductDTO; import com.casic.missiles.modular.device.dto.SelectProductDTO; import com.casic.missiles.modular.device.entity.BaseProduct; @@ -21,7 +22,6 @@ import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; -import java.util.List; import java.util.Objects; /** @@ -49,6 +49,7 @@ return ReturnUtil.success(super.packForBT(iBaseProductService.pageList(page, requestDTO))); } + @OperateLog(value = "新增产品", key = "productName,deviceType,deviceModel,manufacturerId,protocol,accessMethod,powerSupplyMode,dataService", dict = ProductDict.class, type = "add") @ApiOperation("新增") @PostMapping("/add") @ResponseBody @@ -58,6 +59,7 @@ } + @OperateLog(value = "编辑产品", dict = ProductDict.class, serviceClass = IBaseProductService.class, type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -68,10 +70,11 @@ return ReturnUtil.success(iBaseProductService.updateBaseProductById(baseProduct)); } + @OperateLog(value = "删除产品", key = "productName", dict = ProductDict.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 509bd7b..103acf2 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 @@ -9,6 +9,7 @@ import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; @@ -17,6 +18,7 @@ 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.aop.annotion.OperateLog; import com.casic.missiles.modular.device.dict.BusConfigDict; import com.casic.missiles.modular.device.dict.DeviceDict; import com.casic.missiles.modular.device.dto.*; @@ -65,7 +67,8 @@ } - @BussinessLog(value = "新增设备", key = "devcode,deviceName,deviceType,installDate,productId", dict = DeviceDict.class) + @OperateLog(value = "新增设备", key = "devcode,deviceType,productId," + + "valid,communicationType,simId,warrantyPeriod,tagNumber,leftLength,rightLength,", dict = DeviceDict.class,type = "add") @CacheEvict(value="busLedgersCache", key="#busDevice.getDevcode()") @ApiOperation("新增") @PostMapping("/add") @@ -75,7 +78,8 @@ } - @BussinessLog(value = "编辑设备", key = "devcode,deviceName,deviceType,installDate,productId", dict = DeviceDict.class) + @OperateLog(value = "编辑设备", key = "devcode,deviceType,installDate,productId," + + "leftLength,rightLength,communicationType,simId,warrantyPeriod", dict = DeviceDict.class,serviceClass = IBusDeviceService.class,type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -86,11 +90,12 @@ return ReturnUtil.success(iBusDeviceService.updateBusDevice(busDevice)); } + @OperateLog(value = "删除设备", key = "devcode", dict = DeviceDict.class,serviceClass = IBusDeviceService.class,type = "delete") @CacheEvict(value="busLedgersCache", allEntries = true) @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 31de56e..6f35acd 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 @@ -4,8 +4,8 @@ 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.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.page.PageFactory; @@ -16,11 +16,8 @@ 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.BusDeviceDTO; -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.BusDevice; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.CommonUtil; @@ -53,6 +50,7 @@ private final IBusLedgerPipeService iBusLedgerPipeService; private final IBaseExportService iBaseExportService; + private final AbstractDictService abstractDictService; @ApiOperation("新建点位") @PostMapping("/addPosition") @@ -60,10 +58,10 @@ 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,"安装位号已存!!!"); + if (busLedgerPipeList != null && busLedgerPipeList.size() > 0) { + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE, "安装位号已存!!!"); } - Long id =IdUtil.getSnowflake(1,2).nextId(); + Long id = IdUtil.getSnowflake(1, 2).nextId(); busLedgerPipe.setId(id); busLedgerPipe.setLedgerCode(busLedgerPipe.getTagNumber()); busLedgerPipe.setArea(CommonUtil.getAreaCode(busLedgerPipe.getPosition())); @@ -139,7 +137,11 @@ page.setCurrent(1); page.setSize(Integer.MAX_VALUE); Page devicePage = iBusLedgerPipeService.listPage(page, busLedgerPipeRequestDTO); + List records = devicePage.getRecords(); try { + for (BusLedgerPipe busLedgerPipe : records) { + busLedgerPipe.setLocationCategory(abstractDictService.getDictNameByCode("locationType", busLedgerPipe.getLocationCategory())); + } iBaseExportService.exportExcel(response, BusLedgerPipe.class, devicePage.getRecords(), ExportEnum.LEDGER_PIPE_EXPORT.getSheetName()); } catch (Exception e) { e.printStackTrace(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java index e87f3f8..8040c74 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java @@ -7,10 +7,13 @@ 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.DeletesDTO; import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.ProtocolDict; import com.casic.missiles.modular.device.dto.BusProtocolDTO; import com.casic.missiles.modular.device.entity.BusProtocol; import com.casic.missiles.modular.device.service.IBusProtocolService; @@ -35,10 +38,10 @@ @RestController @RequestMapping("/system/busProtocol") public class BusProtocolController extends ExportController { - + private final IBusProtocolService protocolService; - + @ApiOperation("查询分页接口") @PostMapping("/listPage") @ResponseBody @@ -47,9 +50,10 @@ queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getProtocolName()), "PROTOCOL_NAME", requestDTO.getProtocolName()); queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getProtocolCode()), "PROTOCOL_CODE", requestDTO.getProtocolCode()); Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(protocolService.page(page,queryWrapper))); + return ReturnUtil.success(super.packForBT(protocolService.page(page, queryWrapper))); } + @OperateLog(value = "新增协议", key = "protocolName,protocolCode,version,ip,description", dict = ProtocolDict.class, type = "add") @ApiOperation("新增") @PostMapping("/add") @ResponseBody @@ -58,6 +62,7 @@ return ReturnUtil.success(protocolService.save(busProtocol)); } + @OperateLog(value = "编辑协议", dict = ProtocolDict.class, serviceClass = IBusProtocolService.class, type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -68,10 +73,11 @@ return ReturnUtil.success(protocolService.updateById(busProtocol)); } + @OperateLog(value = "删除协议", key = "protocolName", dict = ProtocolDict.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 23ddee9..24c4712 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 @@ -2,7 +2,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.entity.BusDevice; import com.casic.missiles.util.InConditionDriver; @@ -46,27 +45,27 @@ @Param("orderColumn") String orderColumn, @Param("request") CommonRequestDTO request); - @Select("SELECT BFZT from bus_device where VALID=1 and DEVCODE= #{devcode} limit 1" ) - String getBfcf( @Param("devcode") String devcode); + @Select("SELECT BFZT from bus_device where VALID=1 and DEVCODE= #{devcode} limit 1") + String getBfcf(@Param("devcode") String devcode); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getMethaneData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getMethaneData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_tube_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getTubeOtherData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_tube_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getTubeOtherData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gasliquid_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getLGData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gasliquid_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getLGData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_monitor_pipe_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getMonitorPipeOtherData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_monitor_pipe_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getMonitorPipeOtherData(@Param("devcodes") List devcodes); - @Select("SELECT ALARM_THRESHOLD FROM `alarm_rule_device` where DEVCODE = #{devcode} order by ALARM_THRESHOLD asc " ) + @Select("SELECT ALARM_THRESHOLD FROM `alarm_rule_device` where DEVCODE = #{devcode} order by ALARM_THRESHOLD asc ") List getSpecialDeviceRule(@Param("devcode") String devcode); @Select(" select ar.ALARM_THRESHOLD from alarm_rule ar where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + @@ -81,4 +80,7 @@ "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") List getListByWellId(@Param("wellId") Long wellId); + + BusDeviceOperateLogDTO getByDeviceId(@Param("id") Long id); + } 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 8ba4b15..3109344 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 @@ -44,7 +44,7 @@ LEFT JOIN base_product bp ON bd.PRODUCT_ID = bp.ID LEFT JOIN bus_device_ledger br on br.DEVICE_ID = bd.ID AND br.VALID='1' LEFT JOIN bus_manufacturer bm on bm.ID = bp.MANUFACTURER_ID - LEFT JOIN bus_ledger_all_view bl on bl.ID = br.LEDGER_ID AND br.VALID='1' and bl.type = br.type + LEFT JOIN bus_ledger_all_view bl on bl.ID = br.LEDGER_ID AND bl.VALID='1' and bl.type = br.type where bd.valid>0 @@ -95,6 +95,32 @@ + + + SELECT - rd.*, - at.alarm_type, - bt.TYPE_NAME as devTypeName - FROM - alarm_records rd - LEFT JOIN bus_ledger_all_view lr ON lr.ledgerCode = rd.LEDGER_CODE - LEFT JOIN alarm_type at ON at.ID = rd.ALARM_TYPE_ID - LEFT JOIN bus_device bd ON bd.DEVCODE = rd.DEVCODE and bd.valid >0 - LEFT JOIN base_device_type bt ON bt.id = bd.DEVICE_TYPE + rd.*, + AT.alarm_type, + bt.TYPE_NAME AS devTypeName + FROM + alarm_records rd + LEFT JOIN bus_device bd ON bd.DEVCODE = rd.DEVCODE + AND bd.valid > 0 + LEFT JOIN bus_device_ledger bl ON bd.ID = bl.DEVICE_ID + AND bl.VALID = '1' + 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' + AND lr.ledgerCode = rd.LEDGER_CODE + LEFT JOIN alarm_type AT ON AT.ID = rd.ALARM_TYPE_ID + LEFT JOIN base_device_type bt ON bt.id = bd.DEVICE_TYPE where rd.STATUS ='1' and rd.EXCEPTION_TYPE='0' @@ -695,6 +705,7 @@ dt.LOGTIME, bv.tagNumber, bv.ledgerCode, + bv.ledgerName, bdt.TYPE_NAME, bv.place, bv.type, @@ -720,6 +731,7 @@ t.tagNumber, t.ledgerCode, t.TYPE_NAME, + t.ledgerName, t.OFF_DAYS, t.LOGTIME, t.place, diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml index 7aff0f0..a63dac1 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml @@ -25,34 +25,55 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java index 3e0edd6..9dab3a7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java @@ -71,4 +71,18 @@ private Long deptid; + @ApiModelProperty("经度") + private String lngGaode; + + @ApiModelProperty("纬度") + private String latGaode; + + @ApiModelProperty("监测类型") + private String watchObject; + + @ApiModelProperty("点位id") + private Long ledgerId; + + + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java index e938da8..60464c4 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java @@ -12,6 +12,7 @@ private String deviceType; private String tagNumber; private String ledgerCode; + private String ledgerName; private String place; //台账类型 private String type; 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 ac4cabe..e623df7 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 @@ -44,6 +44,7 @@ import static cn.hutool.core.date.DateUnit.DAY; import static com.casic.missiles.util.TimeConvertUtil.TimeConverter; +import static com.casic.missiles.util.TimeConvertUtil.TimeConverterSecond; /** *

@@ -180,8 +181,8 @@ public DeviceAlarmDetailDTO deviceAlarmDetail(Long id) { DeviceAlarmDetailDTO alarmDetail = this.baseMapper.deviceAlarmDetail(id); - alarmDetail.setCancelDuration(TimeConverter(alarmDetail.getCancelDuration())); - alarmDetail.setProcessDuration(TimeConverter(alarmDetail.getProcessDuration())); + alarmDetail.setCancelDuration(TimeConverterSecond(alarmDetail.getCancelDuration())); + alarmDetail.setProcessDuration(TimeConverterSecond(alarmDetail.getProcessDuration())); alarmDetail.setDeptName(ObjectUtil.isNotEmpty(alarmDetail.getDeptid()) ? commonServer.getDeptNamesByDeptId(alarmDetail.getDeptid()) : ""); // alarmDetail.setAddress(alarmDetail.getTagNumber().concat("|").concat(alarmDetail.getLedgerName())); alarmDetail.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmDetail.getAlarmCategory())); @@ -524,16 +525,26 @@ @Override public void cancelDeviceAlarm(String devCode) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("DEVCODE", devCode); - updateWrapper.eq("EXCEPTION_TYPE", "1"); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE", devCode); + queryWrapper.eq("EXCEPTION_TYPE", "1"); //只有挂起和已处置的才消 // updateWrapper.ge("PROCESS_STATUS", "3"); - updateWrapper.eq("STATUS", "1"); - updateWrapper.set("STATUS", "0"); - updateWrapper.set("CANCEL_TIME", new Date()); - this.update(updateWrapper); - //toDo:需要加流程取消日志 + queryWrapper.eq("STATUS", "1"); + List alarmRecordsList = this.list(queryWrapper); + if (alarmRecordsList != null && alarmRecordsList.size() > 0) { + alarmRecordsList.forEach(alarmRecords -> { + alarmRecords.setStatus("0"); + alarmRecords.setCancelTime(new Date()); + alarmRecords.setPreProcessStatus(alarmRecords.getProcessStatus()); + alarmRecords.setProcessStatus(ApprovalStatusEnum.FINISHED.getCode()); + this.updateById(alarmRecords); + }); + //添加流程日志 + approvalLogMapper.insert(new ApprovalLog(alarmRecordsList.get(0).getId(), "1", + "", ApprovalStatusEnum.FINISHED.getCode(), + null)); + } } @Override @@ -674,8 +685,12 @@ AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), data.concat("%LEL"), data, - alarmRuleResponseDTO.getAlarmLevelId(),DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmLevelId(), DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmRuleResponseDTO.getAlarmTypeName(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -721,7 +736,7 @@ @Override - public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime,List busWellDTOList, + public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime, List busWellDTOList, Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { @@ -730,8 +745,12 @@ try { AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, - alarmLevelId, DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmLevelId, DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmTypeName, + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace() + , "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -793,7 +812,11 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.get().getAlarmTypeId(), alarmRuleResponseDTO.get().getAlarmTypeName(), alarmRuleResponseDTO.get().getAlarmLevelId(), DateUtil.parse(logTime), - alarmRuleResponseDTO.get().getAlarmThreshold(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "1"); + alarmRuleResponseDTO.get().getAlarmThreshold(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "1"); this.save(alarmRecords); } catch (Exception e) { e.printStackTrace(); @@ -846,8 +869,8 @@ * @param cell */ @Override - public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent,String logTime) { - this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent,DateUtil.parse(logTime)); + public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent, String logTime) { + this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent, DateUtil.parse(logTime)); } @Override @@ -903,7 +926,10 @@ offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), - offDeviceDTO.getPlace(), "1"); + ObjectUtil.isNotEmpty(offDeviceDTO.getLedgerName()) ? + offDeviceDTO.getTagNumber().concat("|"). + concat(offDeviceDTO.getLedgerName()) : + offDeviceDTO.getPlace(), "1"); alarmRecordsList.add(alarmRecords); ledgers.add(offDeviceDTO); } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java new file mode 100644 index 0000000..cb554b9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.data.dto; + + +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class PanDataDTO implements Serializable { + + private static final long serialVersionUID = 1232822221212L; + + private String dataTime; + + private String attributeType; + + private String dataValue; + + private String deviceCode; + + + +} 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 index a082d00..2a943ad 100644 --- 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 @@ -23,6 +23,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -37,6 +38,7 @@ * @author zt * @since 2025-01-22 */ +@Slf4j @RequiredArgsConstructor @Service public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { @@ -71,8 +73,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -80,8 +81,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}",devCode, e); } } @@ -141,8 +141,7 @@ } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -222,8 +221,10 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); +// e.printStackTrace(); +// log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); + } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java index dd80611..cd24860 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java @@ -83,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -124,8 +123,7 @@ busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -200,8 +198,7 @@ alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } //低电量报警处理 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 302b446..f0def39 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 @@ -76,8 +76,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -85,8 +84,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -133,8 +131,7 @@ if (i < jsonArray.size() - 1) continue; busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -217,8 +214,7 @@ } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } 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 e5ba8f7..a02af88 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataMonitorPipeOtherServiceImpl extends ServiceImpl implements IDataMonitorPipeOtherService, IDataAbstractService { @@ -73,8 +75,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -116,8 +116,7 @@ //2.写入新的报警 alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + log.error("处理报警时发生异常,devcode:{},e:{}", devCode, e); } } } @@ -160,8 +159,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmEventCode)); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -341,8 +339,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag || ObjectUtil.isNotEmpty(alarmContent) ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java index 5dc8c2b..f383690 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java @@ -2,7 +2,6 @@ import cn.hutool.core.date.DateUtil; 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; @@ -13,15 +12,20 @@ import com.casic.missiles.modular.alarm.service.IAlarmRuleService; import com.casic.missiles.modular.data.dao.DataGasMapper; import com.casic.missiles.modular.data.dao.DataPanGasMapper; +import com.casic.missiles.modular.data.dto.PanDataDTO; import com.casic.missiles.modular.data.entity.DataPanGas; import com.casic.missiles.modular.data.service.IDataPanGasService; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.CommonUtil; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonToken; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.io.IOException; import java.util.Date; import java.util.List; import java.util.Map; @@ -68,78 +72,179 @@ } - @Transactional @Override public boolean processAcceptGasData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); - JSONArray jsonArray = jsonObject.getJSONArray("data"); - String devCode = ""; - for (int i = 0; i < jsonArray.size(); i++) { - try { - devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); - if (ObjectUtil.isEmpty(devCode)) continue; - List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); - String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); - String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); - //暂只存浓度 - if ("2".equals(attributeType)) continue; - String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); - gas = String.format("%.2f", Double.valueOf(gas)); - //1.存数据 - save(DataPanGas.builder() - .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") - .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") - .deviceCode(devCode) - .concentration(gas) - .logtime(DateUtil.parseDateTime(dataTime)) - .build());//存储采集数据 - //2.有无超限处理流程(判断最后一条数据) -// if (i < jsonArray.size() - 1) continue; - - //3.清除设备告警 - alarmRecordsService.cancelDeviceAlarm(devCode); - //4.存报警 - //若没绑场站,则不产生报警 - boolean alarmFlag = false; - String bfcf = busDeviceService.getBfcf(devCode); - 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))) { - dataTime = dataTime.replaceAll("-", ""); - dataTime = dataTime.replaceAll(":", ""); - dataTime = dataTime.replaceAll("\\s+", ""); - alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); - } - break; - } - } - } - //5.清数据报警 - if (!alarmFlag) { - alarmRecordsService.cancelDataAlarm(devCode); - } - //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); - //7.更新监测井状态 (1:正常,2:报警) - if (busWellDTOList != null && busWellDTOList.size() > 0) { - alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); - } - } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + JsonFactory factory = new JsonFactory(); + try (JsonParser parser = factory.createParser(jsonObject.getString("data"))) { + // 定位到 "data" 数组 + while (parser.nextToken() != JsonToken.START_ARRAY) { + parser.nextToken(); } + // 逐条处理数据 + while (parser.nextToken() != JsonToken.END_ARRAY) { + if (parser.getCurrentToken() == JsonToken.START_OBJECT) { + processSingleData(parseJsonObject(parser)); + } + + } + } catch (IOException e) { + e.printStackTrace(); } + return true; } + private PanDataDTO parseJsonObject(JsonParser parser) throws IOException { + PanDataDTO panDataDTO = new PanDataDTO(); + while (parser.nextToken() != JsonToken.END_OBJECT) { + String fieldName = parser.getCurrentName(); + if ("dataTime".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataTime(parser.getText()); + } else if ("attributeType".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setAttributeType(parser.getText()); + } else if ("dataValue".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataValue(parser.getText()); + } else if ("deviceCode".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDeviceCode(parser.getText()); + } + } + return panDataDTO; + } + + + private void processSingleData(PanDataDTO panDataDTO) { + try { + String devCode = panDataDTO.getDeviceCode(); + if (ObjectUtil.isEmpty(devCode)) return; + List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); + String gas = panDataDTO.getDataValue(); + String attributeType = panDataDTO.getAttributeType(); + //暂只存浓度 + if ("2".equals(attributeType)) return; + String dataTime = panDataDTO.getDataTime(); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataPanGas.builder() + .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .deviceCode(devCode) + .concentration(gas) + .logtime(DateUtil.parseDateTime(dataTime)) + .build());//存储采集数据 + + boolean alarmFlag = false; + String bfcf = busDeviceService.getBfcf(devCode); + 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))) { +// dataTime = dataTime.replaceAll("-", ""); +// dataTime = dataTime.replaceAll(":", ""); +// dataTime = dataTime.replaceAll("\\s+", ""); + alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); + //7.更新监测井状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + log.error("处理云台数据时发生异常,devcode:{},data:{},e:{}", panDataDTO.getDeviceCode(), panDataDTO.toString(), e); + } + } + + +// @Transactional +// @Override +// public boolean processAcceptGasData(Map dataParams) { +// JSONObject jsonObject = new JSONObject(dataParams); +// JSONArray jsonArray = jsonObject.getJSONArray("data"); +// String devCode = ""; +// for (int i = 0; i < jsonArray.size(); i++) { +// try { +// devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); +// if (ObjectUtil.isEmpty(devCode)) continue; +// List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); +// String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); +// String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); +// //暂只存浓度 +// if ("2".equals(attributeType)) continue; +// String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); +// gas = String.format("%.2f", Double.valueOf(gas)); +// //1.存数据 +// save(DataPanGas.builder() +// .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") +// .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") +// .deviceCode(devCode) +// .concentration(gas) +// .logtime(DateUtil.parseDateTime(dataTime)) +// .build());//存储采集数据 +// //2.有无超限处理流程(判断最后一条数据) +//// if (i < jsonArray.size() - 1) continue; +// +// //3.清除设备告警 +//// alarmRecordsService.cancelDeviceAlarm(devCode); +// //4.存报警 +// //若没绑场站,则不产生报警 +// boolean alarmFlag = false; +// String bfcf = busDeviceService.getBfcf(devCode); +// 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))) { +//// dataTime = dataTime.replaceAll("-", ""); +//// dataTime = dataTime.replaceAll(":", ""); +//// dataTime = dataTime.replaceAll("\\s+", ""); +// alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); +// } +// break; +// } +// } +// } +// //5.清数据报警 +// if (!alarmFlag) { +// alarmRecordsService.cancelDataAlarm(devCode); +// } +// //6.更新电量及状态 (1:正常,2:报警) +// alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); +// //7.更新监测井状态 (1:正常,2:报警) +// if (busWellDTOList != null && busWellDTOList.size() > 0) { +// alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); +// } +// } catch (Exception e) { +// log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); +// } +// } +// return true; +// } + @Override public boolean acceptAlarmData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); 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 37d731d..a17953b 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataTubeOtherServiceImpl extends ServiceImpl implements IDataTubeOtherService, IDataAbstractService { @@ -73,7 +75,7 @@ } } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,7 +84,7 @@ imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -122,8 +124,8 @@ } //特殊处理消警 if ("CancelWaterImmersionAlarm".equals(alarmType)) { - if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { - alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + if (alarmRecordsService.isWatchAlarms(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelWatchAlarms(devCode, "WaterImmersionAlarm"); } continue; } @@ -146,8 +148,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmType)); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -227,8 +228,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java new file mode 100644 index 0000000..3be65dd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java @@ -0,0 +1,170 @@ +package com.casic.missiles.modular.aop; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.aop.annotion.ReflectionUtils; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.modular.interfaces.log.LogManager; +import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.Serializable; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Aspect +@Component +public class OperateLogAspect { + private Logger log = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private ApplicationContext applicationContext; + + public static volatile Map oldMap = new HashMap<>(); + + public OperateLogAspect() { + } + + @Pointcut("@annotation(com.casic.missiles.modular.aop.annotion.OperateLog)") + public void cutService() { + } + + @Around("cutService()") + public Object recordSysLog(ProceedingJoinPoint point) throws Throwable { + Object result = point.proceed(); + + try { + this.handle(point); + } catch (Exception var4) { + this.log.error("日志记录出错!", var4); + } + + return result; + } + + /** + * 处理请求前执行 + */ + @Before(value = "@annotation(operateLog)") + public void boBefore(JoinPoint joinPoint, OperateLog operateLog) { + Object info = joinPoint.getArgs()[0]; + if ("edit".equals(operateLog.type()) && operateLog.needDefaultCompare()) { + Class cls = operateLog.serviceClass(); + IService service = (IService) applicationContext.getBean(cls); + Object result; + if (service instanceof IBusDeviceService) { + result = ((IBusDeviceService) service).getByDeviceId((Long) ReflectionUtils.getFieldValue(info, "id")); + } else + result = service.getById((Serializable) ReflectionUtils.getFieldValue(info, "id")); + oldMap = (Map) objectToMap(result); // 存储修改前的对象 + } + } + + private void handle(ProceedingJoinPoint point) throws Exception { + Signature sig = point.getSignature(); + MethodSignature msig = null; + if (!(sig instanceof MethodSignature)) { + throw new IllegalArgumentException("该注解只能用于方法"); + } else { + msig = (MethodSignature) sig; + Object target = point.getTarget(); + Method currentMethod = target.getClass().getMethod(msig.getName(), msig.getParameterTypes()); + String methodName = currentMethod.getName(); + AuthUser user = ShiroKit.getUser(); + if (null != user) { + String className = point.getTarget().getClass().getName(); + Object[] params = point.getArgs(); + OperateLog annotation = (OperateLog) currentMethod.getAnnotation(OperateLog.class); + String bussinessName = annotation.value(); + String key = annotation.key(); + Class dictClass = annotation.dict(); + String sb = argsArrayToString(params); + String msg = sb; + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + if ("add".equals(annotation.type())) { + Map parameters = (Map) objectToMap(params[0]); + msg = CollectionUtils.isEmpty(parameters) ? sb : ReflectionUtils.parseMutiKey(dictMap, key, parameters); + } else if ("edit".equals(annotation.type())) { + msg = CollectionUtils.isEmpty(oldMap) ? sb : ReflectionUtils.contrastObj(dictClass, key, params[0], oldMap); + }else if("delete".equals(annotation.type())){ + msg=dictMap.get(annotation.key())+":"+ReflectionUtils.getDeleteKeys(params[0]); + } + LogManager.me().executeLog(LogTaskFactory.bussinessLog(user.getId(), bussinessName, className, methodName, msg)); + } + } + } + + + /** + * 参数拼装 + */ + private String argsArrayToString(Object[] paramsArray) { + Gson gson = new GsonBuilder().create(); + String params = ""; + if (paramsArray != null && paramsArray.length > 0) { + for (int i = 0; i < paramsArray.length; i++) { + if (!isFilterObject(paramsArray[i])) { + params += gson.toJson(paramsArray[i]) + " & "; + } + } + } + return params.trim(); + } + + + /** + * 判断是否需要过滤的对象。 + * + * @param o 对象信息。 + * @return 如果是需要过滤的对象,则返回true;否则返回false。 + */ + public boolean isFilterObject(final Object o) { + return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse; + } + + private Map objectToMap(Object obj) { + if (obj == null) { + return null; + } + ObjectMapper mapper = new ObjectMapper(); + mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + // 如果使用JPA请自己打开这条配置 + // mapper.addMixIn(Object.class, IgnoreHibernatePropertiesInJackson.class); + Map mappedObject = mapper.convertValue(obj, Map.class); + return mappedObject; + + + } +} + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java new file mode 100644 index 0000000..77afa9c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.aop.annotion; + +import java.lang.annotation.*; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.FIELD}) +@Documented +public @interface DataName { + String name() default ""; // 字段名称 + + /** + * 读取枚举内容转义表达式 (如: 0=男,1=女,2=未知) + */ + String readConverterExp() default ""; +} + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java new file mode 100644 index 0000000..f1f59ad --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.aop.annotion; + + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.common.constant.dictmap.base.SystemDict; + +import java.lang.annotation.*; + +@Inherited +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.METHOD}) +public @interface OperateLog { + String value() default ""; + + String key() default "id"; + + Class serviceClass() default IService.class; + + // 是否需要比较新旧数据 + boolean needDefaultCompare() default true; + + //操作类型 add update delete + String type() default "update"; + + Class dict() default SystemDict.class; +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java new file mode 100644 index 0000000..eb773ad --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java @@ -0,0 +1,328 @@ +package com.casic.missiles.modular.aop.annotion; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.modular.interfaces.dictmap.factory.DictFieldWrapperFactory; +import lombok.extern.slf4j.Slf4j; + +import java.beans.PropertyDescriptor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.*; + +import static com.casic.missiles.modular.interfaces.utils.Contrast.firstCharToLowerCase; +import static com.casic.missiles.modular.interfaces.utils.Contrast.firstCharToUpperCase; + +@Slf4j +public class ReflectionUtils { + + /** + * 直接读取对象属性值, 无视private/protected修饰符, 不经过getter函数. + * + * @param obj 读取的对象 + * @param fieldName 读取的列 + * @return 属性值 + */ + public static Object getFieldValue(final Object obj, final String fieldName) { + Field field = getAccessibleField(obj, fieldName); + if (field == null) { + throw new IllegalArgumentException("Could not find field [" + fieldName + "] on target [" + obj + "]"); + } + + Object result = null; + try { + result = field.get(obj); + } catch (IllegalAccessException e) { + log.error("不可能抛出的异常{}", e.getMessage()); + e.printStackTrace(); + } + return result; + } + + /** + * 循环向上转型, 获取对象的DeclaredField, 并强制设置为可访问.如向上转型到Object仍无法找到, 返回null. + * + * @param obj 查找的对象 + * @param fieldName 列名 + * @return 列 + */ + public static Field getAccessibleField(final Object obj, final String fieldName) { + for (Class superClass = obj.getClass(); superClass != Object.class; superClass = superClass.getSuperclass()) { + try { + Field field = superClass.getDeclaredField(fieldName); + makeAccessible(field); + return field; + } catch (NoSuchFieldException e) { // NOSONAR + // Field不在当前类定义,继续向上转型 + e.printStackTrace(); + continue; // new add + } + } + return null; + } + + /** + * 改变private/protected的成员变量为public,尽量不调用实际改动的语句,避免JDK的SecurityManager抱怨。 + * + * @param + */ + public static void makeAccessible(Field field) { + if ((!Modifier.isPublic(field.getModifiers()) || !Modifier.isPublic(field.getDeclaringClass().getModifiers()) || Modifier + .isFinal(field.getModifiers())) && !field.isAccessible()) { + field.setAccessible(true); + } + } + + /** + * 获取两个对象同名属性内容不相同的列表 + * + * @param class1 old对象 + * @param class2 new对象 + * @return 区别列表 + * @throws ClassNotFoundException 异常 + * @throws IllegalAccessException 异常 + */ + public static List> compareTwoClass(Object class1, Object class2) throws ClassNotFoundException, IllegalAccessException { + List> list = new ArrayList>(); + // 获取对象的class + Class clazz1 = class1.getClass(); + Class clazz2 = class2.getClass(); + // 获取对象的属性列表 + Field[] field1 = clazz1.getDeclaredFields(); + Field[] field2 = clazz2.getDeclaredFields(); + StringBuilder sb = new StringBuilder(); + // 遍历属性列表field1 + for (int i = 0; i < field1.length; i++) { + // 遍历属性列表field2 + for (int j = 0; j < field2.length; j++) { + // 如果field1[i]属性名与field2[j]属性名内容相同 + if (field1[i].getName().equals(field2[j].getName())) { + if (field1[i].getName().equals(field2[j].getName())) { + field1[i].setAccessible(true); + field2[j].setAccessible(true); + // 如果field1[i]属性值与field2[j]属性值内容不相同 + if (!compareTwo(field1[i].get(class1), field2[j].get(class2))) { + Map map2 = new HashMap(); + DataName name = field1[i].getAnnotation(DataName.class); + String fieldName = ""; + if (name != null) { + fieldName = name.name(); + } else { + fieldName = field1[i].getName(); + } + map2.put("name", fieldName); + map2.put("old", field1[i].get(class1)); + map2.put("new", field2[j].get(class2)); + list.add(map2); + } + break; + } + } + } + } + return list; + } + + /** + * 对比两个数据是否内容相同 + * + * @param object1 比较对象1 + * @param object2 比较对象2 + * @return boolean类型 + */ + public static boolean compareTwo(Object object1, Object object2) { + if (object1 == null && object2 == null) { + return true; + } + if (object1 == null && object2 != null) { + return false; + } + if (object1.equals(object2)) { + return true; + } + return false; + } + + public static String contrastObjByName(Class dictClass, String key, Object pojo1, Map pojo2) throws IllegalAccessException, InstantiationException { + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + String str = parseMutiKey(dictMap, key, pojo2) + ";;;"; + + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if (!"serialVersionUID".equals(field.getName())) { + String prefix = "get"; + int prefixLength = 3; + if (field.getType().getName().equals("java.lang.Boolean")) { + prefix = "is"; + prefixLength = 2; + } + + Method getMethod = null; + + try { + getMethod = clazz.getDeclaredMethod(prefix + firstCharToUpperCase(field.getName())); + } catch (NoSuchMethodException var22) { + System.err.println("this className:" + clazz.getName() + " is not methodName: " + var22.getMessage()); + continue; + } + + Object o1 = getMethod.invoke(pojo1); + Object o2 = pojo2.get(firstCharToLowerCase(getMethod.getName().substring(prefixLength))); + if (o1 != null && o2 != null) { + if (o1 instanceof Date) { + o1 = DateUtil.format(new Date(), "yyyy-MM-dd"); + } else if (o1 instanceof Integer) { + o2 = Integer.parseInt(o2.toString()); + } + + if (!o1.toString().equals(o2.toString())) { + if (i != 1) { + str = str + ";;;"; + } + + String fieldName = dictMap.get(field.getName()); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(field.getName()); + if (fieldWarpperMethodName != null) { + Object o1Warpper = DictFieldWrapperFactory.createFieldWrapper(o1, fieldWarpperMethodName); + Object o2Warpper = DictFieldWrapperFactory.createFieldWrapper(o2, fieldWarpperMethodName); + str = str + "字段名称:" + fieldName + ",旧值:" + o1Warpper + ",新值:" + o2Warpper; + } else { + str = str + "字段名称:" + fieldName + ",旧值:" + o1 + ",新值:" + o2; + } + + ++i; + } + } + } + } + } catch (Exception var23) { + var23.printStackTrace(); + } + + return str; + } + + public static String parseMutiKey(AbstractDictMap dictMap, String key, Map requests) { + StringBuilder sb = new StringBuilder(); + if (key.indexOf(",") != -1) { + String[] keys = key.split(","); + String[] var13 = keys; + int var14 = keys.length; + + for (int var7 = 0; var7 < var14; ++var7) { + String item = var13[var7].trim(); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(item); + Object value = requests.get(item); + if (fieldWarpperMethodName != null) { + Object valueWarpper = DictFieldWrapperFactory.createFieldWrapper(value, fieldWarpperMethodName); + sb.append(dictMap.get(item) + "=" + valueWarpper + ","); + } else { + sb.append(dictMap.get(item) + "=" + (ObjectUtil.isNotEmpty(value) ? value.toString() : "") + ","); + } + } + + return StrUtil.removeSuffix(sb.toString(), ","); + } else { + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(key); + Object value = requests.get(key); + if (fieldWarpperMethodName != null) { + Object valueWarpper = DictFieldWrapperFactory.createFieldWrapper(value, fieldWarpperMethodName); + sb.append(dictMap.get(key) + "=" + valueWarpper); + } else { + sb.append(dictMap.get(key) + "=" + (ObjectUtil.isNotEmpty(value) ? value.toString() : "")); + } + + return sb.toString(); + } + } + + public static String getDeleteKeys(Object pojo1) { + String str = ""; + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if ("keys".equals(field.getName())) { + PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); + Method getMethod = pd.getReadMethod(); + Object o1 = getMethod.invoke(pojo1); + return ObjectUtil.isNotEmpty(o1) ? o1.toString().replaceAll("\\[|]", "") : "".concat(",已删除"); + } + } + + } catch (Exception var21) { + var21.printStackTrace(); + } + return str; + } + + public static String contrastObj(Class dictClass, String key, Object pojo1, Map pojo2) throws IllegalAccessException, InstantiationException { + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); +// String str = parseMutiKey(dictMap, key, pojo2) + ";;;"; + String str = ""; + + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if (!"serialVersionUID".equals(field.getName())) { + PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); + Method getMethod = pd.getReadMethod(); + Object o1 = getMethod.invoke(pojo1); + Object o2 = pojo2.get(firstCharToLowerCase(getMethod.getName().substring(3))); + if (o1 != null && o2 != null) { + if (o1 instanceof Integer) { + o2 = Integer.parseInt(o2.toString()); + } else if (o1 instanceof Date) { + o1 = DateUtil.format((Date) o1, "yyyy-MM-dd HH:mm:ss"); + } + + if (!o1.toString().equals(o2.toString())) { + if (i != 1) { + str = str + ";"; + } + + String fieldName = dictMap.get(field.getName()); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(field.getName()); + if (fieldWarpperMethodName != null) { + Object o1Warpper = DictFieldWrapperFactory.createFieldWrapper(o1, fieldWarpperMethodName); + Object o2Warpper = DictFieldWrapperFactory.createFieldWrapper(o2, fieldWarpperMethodName); + str = str + fieldName + ":将【" + o1Warpper + "】,改为【" + o2Warpper + "】"; + } else { + str = str + fieldName + ":将【" + o1 + "】,改为【" + o2 + "】"; + } + + ++i; + } + } + } + } + } catch (Exception var21) { + var21.printStackTrace(); + } + + return str; + } + + +} \ No newline at end of file diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java index 7497ebf..18fd820 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java @@ -8,12 +8,14 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.StateDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.DeviceTypeDict; import com.casic.missiles.modular.device.dto.BaseDeviceTypeDTO; import com.casic.missiles.modular.device.dto.BaseDeviceTypeIdsDTO; import com.casic.missiles.modular.device.dto.SelectDTO; @@ -63,6 +65,7 @@ return ReturnUtil.success(super.packForBT(baseDeviceTypePage)); } + @OperateLog(value = "新增设备类型", key = "typeName,watchObject,isUsed,typeDescription", dict = DeviceTypeDict.class, type = "add") @ApiOperation("增加设备类型") @PostMapping("/add") @ResponseBody @@ -71,6 +74,7 @@ return ReturnUtil.success(iBaseDeviceTypeService.saveBaseDeviceType(baseDeviceType)); } + @OperateLog(value = "编辑设备类型", dict = DeviceTypeDict.class, serviceClass = IBaseDeviceTypeService.class, type = "edit") @ApiOperation("编辑设备类型") @PostMapping("/edit") @ResponseBody @@ -81,10 +85,11 @@ return ReturnUtil.success(iBaseDeviceTypeService.updateById(baseDeviceType)); } + @OperateLog(value = "删除设备类型", key = "typeName", dict = DeviceTypeDict.class, serviceClass = IBaseDeviceTypeService.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); @@ -113,7 +118,7 @@ public ReturnDTO selectList(@RequestBody BaseDeviceTypeIdsDTO request) { QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.in(request.getDeviceTypeList()!=null&&request.getDeviceTypeList().size()>0, "id", request.getDeviceTypeList()); + queryWrapper.in(request.getDeviceTypeList() != null && request.getDeviceTypeList().size() > 0, "id", request.getDeviceTypeList()); queryWrapper.eq("IS_USED", "1"); List baseDeviceTypes = iBaseDeviceTypeService.list(queryWrapper); List selectDTOS = new ArrayList<>(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java index 42d752d..54944e2 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java @@ -3,14 +3,15 @@ import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.IdDTO; -import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.ProductDict; import com.casic.missiles.modular.device.dto.BaseProductDTO; import com.casic.missiles.modular.device.dto.SelectProductDTO; import com.casic.missiles.modular.device.entity.BaseProduct; @@ -21,7 +22,6 @@ import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; -import java.util.List; import java.util.Objects; /** @@ -49,6 +49,7 @@ return ReturnUtil.success(super.packForBT(iBaseProductService.pageList(page, requestDTO))); } + @OperateLog(value = "新增产品", key = "productName,deviceType,deviceModel,manufacturerId,protocol,accessMethod,powerSupplyMode,dataService", dict = ProductDict.class, type = "add") @ApiOperation("新增") @PostMapping("/add") @ResponseBody @@ -58,6 +59,7 @@ } + @OperateLog(value = "编辑产品", dict = ProductDict.class, serviceClass = IBaseProductService.class, type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -68,10 +70,11 @@ return ReturnUtil.success(iBaseProductService.updateBaseProductById(baseProduct)); } + @OperateLog(value = "删除产品", key = "productName", dict = ProductDict.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 509bd7b..103acf2 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 @@ -9,6 +9,7 @@ import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; @@ -17,6 +18,7 @@ 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.aop.annotion.OperateLog; import com.casic.missiles.modular.device.dict.BusConfigDict; import com.casic.missiles.modular.device.dict.DeviceDict; import com.casic.missiles.modular.device.dto.*; @@ -65,7 +67,8 @@ } - @BussinessLog(value = "新增设备", key = "devcode,deviceName,deviceType,installDate,productId", dict = DeviceDict.class) + @OperateLog(value = "新增设备", key = "devcode,deviceType,productId," + + "valid,communicationType,simId,warrantyPeriod,tagNumber,leftLength,rightLength,", dict = DeviceDict.class,type = "add") @CacheEvict(value="busLedgersCache", key="#busDevice.getDevcode()") @ApiOperation("新增") @PostMapping("/add") @@ -75,7 +78,8 @@ } - @BussinessLog(value = "编辑设备", key = "devcode,deviceName,deviceType,installDate,productId", dict = DeviceDict.class) + @OperateLog(value = "编辑设备", key = "devcode,deviceType,installDate,productId," + + "leftLength,rightLength,communicationType,simId,warrantyPeriod", dict = DeviceDict.class,serviceClass = IBusDeviceService.class,type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -86,11 +90,12 @@ return ReturnUtil.success(iBusDeviceService.updateBusDevice(busDevice)); } + @OperateLog(value = "删除设备", key = "devcode", dict = DeviceDict.class,serviceClass = IBusDeviceService.class,type = "delete") @CacheEvict(value="busLedgersCache", allEntries = true) @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 31de56e..6f35acd 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 @@ -4,8 +4,8 @@ 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.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.page.PageFactory; @@ -16,11 +16,8 @@ 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.BusDeviceDTO; -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.BusDevice; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.CommonUtil; @@ -53,6 +50,7 @@ private final IBusLedgerPipeService iBusLedgerPipeService; private final IBaseExportService iBaseExportService; + private final AbstractDictService abstractDictService; @ApiOperation("新建点位") @PostMapping("/addPosition") @@ -60,10 +58,10 @@ 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,"安装位号已存!!!"); + if (busLedgerPipeList != null && busLedgerPipeList.size() > 0) { + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE, "安装位号已存!!!"); } - Long id =IdUtil.getSnowflake(1,2).nextId(); + Long id = IdUtil.getSnowflake(1, 2).nextId(); busLedgerPipe.setId(id); busLedgerPipe.setLedgerCode(busLedgerPipe.getTagNumber()); busLedgerPipe.setArea(CommonUtil.getAreaCode(busLedgerPipe.getPosition())); @@ -139,7 +137,11 @@ page.setCurrent(1); page.setSize(Integer.MAX_VALUE); Page devicePage = iBusLedgerPipeService.listPage(page, busLedgerPipeRequestDTO); + List records = devicePage.getRecords(); try { + for (BusLedgerPipe busLedgerPipe : records) { + busLedgerPipe.setLocationCategory(abstractDictService.getDictNameByCode("locationType", busLedgerPipe.getLocationCategory())); + } iBaseExportService.exportExcel(response, BusLedgerPipe.class, devicePage.getRecords(), ExportEnum.LEDGER_PIPE_EXPORT.getSheetName()); } catch (Exception e) { e.printStackTrace(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java index e87f3f8..8040c74 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java @@ -7,10 +7,13 @@ 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.DeletesDTO; import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.ProtocolDict; import com.casic.missiles.modular.device.dto.BusProtocolDTO; import com.casic.missiles.modular.device.entity.BusProtocol; import com.casic.missiles.modular.device.service.IBusProtocolService; @@ -35,10 +38,10 @@ @RestController @RequestMapping("/system/busProtocol") public class BusProtocolController extends ExportController { - + private final IBusProtocolService protocolService; - + @ApiOperation("查询分页接口") @PostMapping("/listPage") @ResponseBody @@ -47,9 +50,10 @@ queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getProtocolName()), "PROTOCOL_NAME", requestDTO.getProtocolName()); queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getProtocolCode()), "PROTOCOL_CODE", requestDTO.getProtocolCode()); Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(protocolService.page(page,queryWrapper))); + return ReturnUtil.success(super.packForBT(protocolService.page(page, queryWrapper))); } + @OperateLog(value = "新增协议", key = "protocolName,protocolCode,version,ip,description", dict = ProtocolDict.class, type = "add") @ApiOperation("新增") @PostMapping("/add") @ResponseBody @@ -58,6 +62,7 @@ return ReturnUtil.success(protocolService.save(busProtocol)); } + @OperateLog(value = "编辑协议", dict = ProtocolDict.class, serviceClass = IBusProtocolService.class, type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -68,10 +73,11 @@ return ReturnUtil.success(protocolService.updateById(busProtocol)); } + @OperateLog(value = "删除协议", key = "protocolName", dict = ProtocolDict.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 23ddee9..24c4712 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 @@ -2,7 +2,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.entity.BusDevice; import com.casic.missiles.util.InConditionDriver; @@ -46,27 +45,27 @@ @Param("orderColumn") String orderColumn, @Param("request") CommonRequestDTO request); - @Select("SELECT BFZT from bus_device where VALID=1 and DEVCODE= #{devcode} limit 1" ) - String getBfcf( @Param("devcode") String devcode); + @Select("SELECT BFZT from bus_device where VALID=1 and DEVCODE= #{devcode} limit 1") + String getBfcf(@Param("devcode") String devcode); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getMethaneData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getMethaneData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_tube_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getTubeOtherData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_tube_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getTubeOtherData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gasliquid_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getLGData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gasliquid_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getLGData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_monitor_pipe_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getMonitorPipeOtherData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_monitor_pipe_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getMonitorPipeOtherData(@Param("devcodes") List devcodes); - @Select("SELECT ALARM_THRESHOLD FROM `alarm_rule_device` where DEVCODE = #{devcode} order by ALARM_THRESHOLD asc " ) + @Select("SELECT ALARM_THRESHOLD FROM `alarm_rule_device` where DEVCODE = #{devcode} order by ALARM_THRESHOLD asc ") List getSpecialDeviceRule(@Param("devcode") String devcode); @Select(" select ar.ALARM_THRESHOLD from alarm_rule ar where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + @@ -81,4 +80,7 @@ "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") List getListByWellId(@Param("wellId") Long wellId); + + BusDeviceOperateLogDTO getByDeviceId(@Param("id") Long id); + } 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 8ba4b15..3109344 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 @@ -44,7 +44,7 @@ LEFT JOIN base_product bp ON bd.PRODUCT_ID = bp.ID LEFT JOIN bus_device_ledger br on br.DEVICE_ID = bd.ID AND br.VALID='1' LEFT JOIN bus_manufacturer bm on bm.ID = bp.MANUFACTURER_ID - LEFT JOIN bus_ledger_all_view bl on bl.ID = br.LEDGER_ID AND br.VALID='1' and bl.type = br.type + LEFT JOIN bus_ledger_all_view bl on bl.ID = br.LEDGER_ID AND bl.VALID='1' and bl.type = br.type where bd.valid>0 @@ -95,6 +95,32 @@ + + + SELECT - rd.*, - at.alarm_type, - bt.TYPE_NAME as devTypeName - FROM - alarm_records rd - LEFT JOIN bus_ledger_all_view lr ON lr.ledgerCode = rd.LEDGER_CODE - LEFT JOIN alarm_type at ON at.ID = rd.ALARM_TYPE_ID - LEFT JOIN bus_device bd ON bd.DEVCODE = rd.DEVCODE and bd.valid >0 - LEFT JOIN base_device_type bt ON bt.id = bd.DEVICE_TYPE + rd.*, + AT.alarm_type, + bt.TYPE_NAME AS devTypeName + FROM + alarm_records rd + LEFT JOIN bus_device bd ON bd.DEVCODE = rd.DEVCODE + AND bd.valid > 0 + LEFT JOIN bus_device_ledger bl ON bd.ID = bl.DEVICE_ID + AND bl.VALID = '1' + 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' + AND lr.ledgerCode = rd.LEDGER_CODE + LEFT JOIN alarm_type AT ON AT.ID = rd.ALARM_TYPE_ID + LEFT JOIN base_device_type bt ON bt.id = bd.DEVICE_TYPE where rd.STATUS ='1' and rd.EXCEPTION_TYPE='0' @@ -695,6 +705,7 @@ dt.LOGTIME, bv.tagNumber, bv.ledgerCode, + bv.ledgerName, bdt.TYPE_NAME, bv.place, bv.type, @@ -720,6 +731,7 @@ t.tagNumber, t.ledgerCode, t.TYPE_NAME, + t.ledgerName, t.OFF_DAYS, t.LOGTIME, t.place, diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml index 7aff0f0..a63dac1 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml @@ -25,34 +25,55 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java index 3e0edd6..9dab3a7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java @@ -71,4 +71,18 @@ private Long deptid; + @ApiModelProperty("经度") + private String lngGaode; + + @ApiModelProperty("纬度") + private String latGaode; + + @ApiModelProperty("监测类型") + private String watchObject; + + @ApiModelProperty("点位id") + private Long ledgerId; + + + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java index e938da8..60464c4 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java @@ -12,6 +12,7 @@ private String deviceType; private String tagNumber; private String ledgerCode; + private String ledgerName; private String place; //台账类型 private String type; 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 ac4cabe..e623df7 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 @@ -44,6 +44,7 @@ import static cn.hutool.core.date.DateUnit.DAY; import static com.casic.missiles.util.TimeConvertUtil.TimeConverter; +import static com.casic.missiles.util.TimeConvertUtil.TimeConverterSecond; /** *

@@ -180,8 +181,8 @@ public DeviceAlarmDetailDTO deviceAlarmDetail(Long id) { DeviceAlarmDetailDTO alarmDetail = this.baseMapper.deviceAlarmDetail(id); - alarmDetail.setCancelDuration(TimeConverter(alarmDetail.getCancelDuration())); - alarmDetail.setProcessDuration(TimeConverter(alarmDetail.getProcessDuration())); + alarmDetail.setCancelDuration(TimeConverterSecond(alarmDetail.getCancelDuration())); + alarmDetail.setProcessDuration(TimeConverterSecond(alarmDetail.getProcessDuration())); alarmDetail.setDeptName(ObjectUtil.isNotEmpty(alarmDetail.getDeptid()) ? commonServer.getDeptNamesByDeptId(alarmDetail.getDeptid()) : ""); // alarmDetail.setAddress(alarmDetail.getTagNumber().concat("|").concat(alarmDetail.getLedgerName())); alarmDetail.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmDetail.getAlarmCategory())); @@ -524,16 +525,26 @@ @Override public void cancelDeviceAlarm(String devCode) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("DEVCODE", devCode); - updateWrapper.eq("EXCEPTION_TYPE", "1"); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE", devCode); + queryWrapper.eq("EXCEPTION_TYPE", "1"); //只有挂起和已处置的才消 // updateWrapper.ge("PROCESS_STATUS", "3"); - updateWrapper.eq("STATUS", "1"); - updateWrapper.set("STATUS", "0"); - updateWrapper.set("CANCEL_TIME", new Date()); - this.update(updateWrapper); - //toDo:需要加流程取消日志 + queryWrapper.eq("STATUS", "1"); + List alarmRecordsList = this.list(queryWrapper); + if (alarmRecordsList != null && alarmRecordsList.size() > 0) { + alarmRecordsList.forEach(alarmRecords -> { + alarmRecords.setStatus("0"); + alarmRecords.setCancelTime(new Date()); + alarmRecords.setPreProcessStatus(alarmRecords.getProcessStatus()); + alarmRecords.setProcessStatus(ApprovalStatusEnum.FINISHED.getCode()); + this.updateById(alarmRecords); + }); + //添加流程日志 + approvalLogMapper.insert(new ApprovalLog(alarmRecordsList.get(0).getId(), "1", + "", ApprovalStatusEnum.FINISHED.getCode(), + null)); + } } @Override @@ -674,8 +685,12 @@ AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), data.concat("%LEL"), data, - alarmRuleResponseDTO.getAlarmLevelId(),DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmLevelId(), DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmRuleResponseDTO.getAlarmTypeName(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -721,7 +736,7 @@ @Override - public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime,List busWellDTOList, + public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime, List busWellDTOList, Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { @@ -730,8 +745,12 @@ try { AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, - alarmLevelId, DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmLevelId, DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmTypeName, + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace() + , "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -793,7 +812,11 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.get().getAlarmTypeId(), alarmRuleResponseDTO.get().getAlarmTypeName(), alarmRuleResponseDTO.get().getAlarmLevelId(), DateUtil.parse(logTime), - alarmRuleResponseDTO.get().getAlarmThreshold(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "1"); + alarmRuleResponseDTO.get().getAlarmThreshold(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "1"); this.save(alarmRecords); } catch (Exception e) { e.printStackTrace(); @@ -846,8 +869,8 @@ * @param cell */ @Override - public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent,String logTime) { - this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent,DateUtil.parse(logTime)); + public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent, String logTime) { + this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent, DateUtil.parse(logTime)); } @Override @@ -903,7 +926,10 @@ offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), - offDeviceDTO.getPlace(), "1"); + ObjectUtil.isNotEmpty(offDeviceDTO.getLedgerName()) ? + offDeviceDTO.getTagNumber().concat("|"). + concat(offDeviceDTO.getLedgerName()) : + offDeviceDTO.getPlace(), "1"); alarmRecordsList.add(alarmRecords); ledgers.add(offDeviceDTO); } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java new file mode 100644 index 0000000..cb554b9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.data.dto; + + +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class PanDataDTO implements Serializable { + + private static final long serialVersionUID = 1232822221212L; + + private String dataTime; + + private String attributeType; + + private String dataValue; + + private String deviceCode; + + + +} 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 index a082d00..2a943ad 100644 --- 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 @@ -23,6 +23,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -37,6 +38,7 @@ * @author zt * @since 2025-01-22 */ +@Slf4j @RequiredArgsConstructor @Service public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { @@ -71,8 +73,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -80,8 +81,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}",devCode, e); } } @@ -141,8 +141,7 @@ } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -222,8 +221,10 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); +// e.printStackTrace(); +// log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); + } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java index dd80611..cd24860 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java @@ -83,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -124,8 +123,7 @@ busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -200,8 +198,7 @@ alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } //低电量报警处理 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 302b446..f0def39 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 @@ -76,8 +76,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -85,8 +84,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -133,8 +131,7 @@ if (i < jsonArray.size() - 1) continue; busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -217,8 +214,7 @@ } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } 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 e5ba8f7..a02af88 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataMonitorPipeOtherServiceImpl extends ServiceImpl implements IDataMonitorPipeOtherService, IDataAbstractService { @@ -73,8 +75,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -116,8 +116,7 @@ //2.写入新的报警 alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + log.error("处理报警时发生异常,devcode:{},e:{}", devCode, e); } } } @@ -160,8 +159,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmEventCode)); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -341,8 +339,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag || ObjectUtil.isNotEmpty(alarmContent) ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java index 5dc8c2b..f383690 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java @@ -2,7 +2,6 @@ import cn.hutool.core.date.DateUtil; 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; @@ -13,15 +12,20 @@ import com.casic.missiles.modular.alarm.service.IAlarmRuleService; import com.casic.missiles.modular.data.dao.DataGasMapper; import com.casic.missiles.modular.data.dao.DataPanGasMapper; +import com.casic.missiles.modular.data.dto.PanDataDTO; import com.casic.missiles.modular.data.entity.DataPanGas; import com.casic.missiles.modular.data.service.IDataPanGasService; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.CommonUtil; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonToken; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.io.IOException; import java.util.Date; import java.util.List; import java.util.Map; @@ -68,78 +72,179 @@ } - @Transactional @Override public boolean processAcceptGasData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); - JSONArray jsonArray = jsonObject.getJSONArray("data"); - String devCode = ""; - for (int i = 0; i < jsonArray.size(); i++) { - try { - devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); - if (ObjectUtil.isEmpty(devCode)) continue; - List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); - String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); - String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); - //暂只存浓度 - if ("2".equals(attributeType)) continue; - String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); - gas = String.format("%.2f", Double.valueOf(gas)); - //1.存数据 - save(DataPanGas.builder() - .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") - .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") - .deviceCode(devCode) - .concentration(gas) - .logtime(DateUtil.parseDateTime(dataTime)) - .build());//存储采集数据 - //2.有无超限处理流程(判断最后一条数据) -// if (i < jsonArray.size() - 1) continue; - - //3.清除设备告警 - alarmRecordsService.cancelDeviceAlarm(devCode); - //4.存报警 - //若没绑场站,则不产生报警 - boolean alarmFlag = false; - String bfcf = busDeviceService.getBfcf(devCode); - 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))) { - dataTime = dataTime.replaceAll("-", ""); - dataTime = dataTime.replaceAll(":", ""); - dataTime = dataTime.replaceAll("\\s+", ""); - alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); - } - break; - } - } - } - //5.清数据报警 - if (!alarmFlag) { - alarmRecordsService.cancelDataAlarm(devCode); - } - //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); - //7.更新监测井状态 (1:正常,2:报警) - if (busWellDTOList != null && busWellDTOList.size() > 0) { - alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); - } - } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + JsonFactory factory = new JsonFactory(); + try (JsonParser parser = factory.createParser(jsonObject.getString("data"))) { + // 定位到 "data" 数组 + while (parser.nextToken() != JsonToken.START_ARRAY) { + parser.nextToken(); } + // 逐条处理数据 + while (parser.nextToken() != JsonToken.END_ARRAY) { + if (parser.getCurrentToken() == JsonToken.START_OBJECT) { + processSingleData(parseJsonObject(parser)); + } + + } + } catch (IOException e) { + e.printStackTrace(); } + return true; } + private PanDataDTO parseJsonObject(JsonParser parser) throws IOException { + PanDataDTO panDataDTO = new PanDataDTO(); + while (parser.nextToken() != JsonToken.END_OBJECT) { + String fieldName = parser.getCurrentName(); + if ("dataTime".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataTime(parser.getText()); + } else if ("attributeType".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setAttributeType(parser.getText()); + } else if ("dataValue".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataValue(parser.getText()); + } else if ("deviceCode".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDeviceCode(parser.getText()); + } + } + return panDataDTO; + } + + + private void processSingleData(PanDataDTO panDataDTO) { + try { + String devCode = panDataDTO.getDeviceCode(); + if (ObjectUtil.isEmpty(devCode)) return; + List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); + String gas = panDataDTO.getDataValue(); + String attributeType = panDataDTO.getAttributeType(); + //暂只存浓度 + if ("2".equals(attributeType)) return; + String dataTime = panDataDTO.getDataTime(); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataPanGas.builder() + .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .deviceCode(devCode) + .concentration(gas) + .logtime(DateUtil.parseDateTime(dataTime)) + .build());//存储采集数据 + + boolean alarmFlag = false; + String bfcf = busDeviceService.getBfcf(devCode); + 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))) { +// dataTime = dataTime.replaceAll("-", ""); +// dataTime = dataTime.replaceAll(":", ""); +// dataTime = dataTime.replaceAll("\\s+", ""); + alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); + //7.更新监测井状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + log.error("处理云台数据时发生异常,devcode:{},data:{},e:{}", panDataDTO.getDeviceCode(), panDataDTO.toString(), e); + } + } + + +// @Transactional +// @Override +// public boolean processAcceptGasData(Map dataParams) { +// JSONObject jsonObject = new JSONObject(dataParams); +// JSONArray jsonArray = jsonObject.getJSONArray("data"); +// String devCode = ""; +// for (int i = 0; i < jsonArray.size(); i++) { +// try { +// devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); +// if (ObjectUtil.isEmpty(devCode)) continue; +// List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); +// String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); +// String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); +// //暂只存浓度 +// if ("2".equals(attributeType)) continue; +// String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); +// gas = String.format("%.2f", Double.valueOf(gas)); +// //1.存数据 +// save(DataPanGas.builder() +// .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") +// .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") +// .deviceCode(devCode) +// .concentration(gas) +// .logtime(DateUtil.parseDateTime(dataTime)) +// .build());//存储采集数据 +// //2.有无超限处理流程(判断最后一条数据) +//// if (i < jsonArray.size() - 1) continue; +// +// //3.清除设备告警 +//// alarmRecordsService.cancelDeviceAlarm(devCode); +// //4.存报警 +// //若没绑场站,则不产生报警 +// boolean alarmFlag = false; +// String bfcf = busDeviceService.getBfcf(devCode); +// 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))) { +//// dataTime = dataTime.replaceAll("-", ""); +//// dataTime = dataTime.replaceAll(":", ""); +//// dataTime = dataTime.replaceAll("\\s+", ""); +// alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); +// } +// break; +// } +// } +// } +// //5.清数据报警 +// if (!alarmFlag) { +// alarmRecordsService.cancelDataAlarm(devCode); +// } +// //6.更新电量及状态 (1:正常,2:报警) +// alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); +// //7.更新监测井状态 (1:正常,2:报警) +// if (busWellDTOList != null && busWellDTOList.size() > 0) { +// alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); +// } +// } catch (Exception e) { +// log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); +// } +// } +// return true; +// } + @Override public boolean acceptAlarmData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); 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 37d731d..a17953b 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataTubeOtherServiceImpl extends ServiceImpl implements IDataTubeOtherService, IDataAbstractService { @@ -73,7 +75,7 @@ } } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,7 +84,7 @@ imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -122,8 +124,8 @@ } //特殊处理消警 if ("CancelWaterImmersionAlarm".equals(alarmType)) { - if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { - alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + if (alarmRecordsService.isWatchAlarms(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelWatchAlarms(devCode, "WaterImmersionAlarm"); } continue; } @@ -146,8 +148,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmType)); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -227,8 +228,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java new file mode 100644 index 0000000..3be65dd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java @@ -0,0 +1,170 @@ +package com.casic.missiles.modular.aop; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.aop.annotion.ReflectionUtils; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.modular.interfaces.log.LogManager; +import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.Serializable; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Aspect +@Component +public class OperateLogAspect { + private Logger log = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private ApplicationContext applicationContext; + + public static volatile Map oldMap = new HashMap<>(); + + public OperateLogAspect() { + } + + @Pointcut("@annotation(com.casic.missiles.modular.aop.annotion.OperateLog)") + public void cutService() { + } + + @Around("cutService()") + public Object recordSysLog(ProceedingJoinPoint point) throws Throwable { + Object result = point.proceed(); + + try { + this.handle(point); + } catch (Exception var4) { + this.log.error("日志记录出错!", var4); + } + + return result; + } + + /** + * 处理请求前执行 + */ + @Before(value = "@annotation(operateLog)") + public void boBefore(JoinPoint joinPoint, OperateLog operateLog) { + Object info = joinPoint.getArgs()[0]; + if ("edit".equals(operateLog.type()) && operateLog.needDefaultCompare()) { + Class cls = operateLog.serviceClass(); + IService service = (IService) applicationContext.getBean(cls); + Object result; + if (service instanceof IBusDeviceService) { + result = ((IBusDeviceService) service).getByDeviceId((Long) ReflectionUtils.getFieldValue(info, "id")); + } else + result = service.getById((Serializable) ReflectionUtils.getFieldValue(info, "id")); + oldMap = (Map) objectToMap(result); // 存储修改前的对象 + } + } + + private void handle(ProceedingJoinPoint point) throws Exception { + Signature sig = point.getSignature(); + MethodSignature msig = null; + if (!(sig instanceof MethodSignature)) { + throw new IllegalArgumentException("该注解只能用于方法"); + } else { + msig = (MethodSignature) sig; + Object target = point.getTarget(); + Method currentMethod = target.getClass().getMethod(msig.getName(), msig.getParameterTypes()); + String methodName = currentMethod.getName(); + AuthUser user = ShiroKit.getUser(); + if (null != user) { + String className = point.getTarget().getClass().getName(); + Object[] params = point.getArgs(); + OperateLog annotation = (OperateLog) currentMethod.getAnnotation(OperateLog.class); + String bussinessName = annotation.value(); + String key = annotation.key(); + Class dictClass = annotation.dict(); + String sb = argsArrayToString(params); + String msg = sb; + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + if ("add".equals(annotation.type())) { + Map parameters = (Map) objectToMap(params[0]); + msg = CollectionUtils.isEmpty(parameters) ? sb : ReflectionUtils.parseMutiKey(dictMap, key, parameters); + } else if ("edit".equals(annotation.type())) { + msg = CollectionUtils.isEmpty(oldMap) ? sb : ReflectionUtils.contrastObj(dictClass, key, params[0], oldMap); + }else if("delete".equals(annotation.type())){ + msg=dictMap.get(annotation.key())+":"+ReflectionUtils.getDeleteKeys(params[0]); + } + LogManager.me().executeLog(LogTaskFactory.bussinessLog(user.getId(), bussinessName, className, methodName, msg)); + } + } + } + + + /** + * 参数拼装 + */ + private String argsArrayToString(Object[] paramsArray) { + Gson gson = new GsonBuilder().create(); + String params = ""; + if (paramsArray != null && paramsArray.length > 0) { + for (int i = 0; i < paramsArray.length; i++) { + if (!isFilterObject(paramsArray[i])) { + params += gson.toJson(paramsArray[i]) + " & "; + } + } + } + return params.trim(); + } + + + /** + * 判断是否需要过滤的对象。 + * + * @param o 对象信息。 + * @return 如果是需要过滤的对象,则返回true;否则返回false。 + */ + public boolean isFilterObject(final Object o) { + return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse; + } + + private Map objectToMap(Object obj) { + if (obj == null) { + return null; + } + ObjectMapper mapper = new ObjectMapper(); + mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + // 如果使用JPA请自己打开这条配置 + // mapper.addMixIn(Object.class, IgnoreHibernatePropertiesInJackson.class); + Map mappedObject = mapper.convertValue(obj, Map.class); + return mappedObject; + + + } +} + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java new file mode 100644 index 0000000..77afa9c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.aop.annotion; + +import java.lang.annotation.*; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.FIELD}) +@Documented +public @interface DataName { + String name() default ""; // 字段名称 + + /** + * 读取枚举内容转义表达式 (如: 0=男,1=女,2=未知) + */ + String readConverterExp() default ""; +} + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java new file mode 100644 index 0000000..f1f59ad --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.aop.annotion; + + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.common.constant.dictmap.base.SystemDict; + +import java.lang.annotation.*; + +@Inherited +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.METHOD}) +public @interface OperateLog { + String value() default ""; + + String key() default "id"; + + Class serviceClass() default IService.class; + + // 是否需要比较新旧数据 + boolean needDefaultCompare() default true; + + //操作类型 add update delete + String type() default "update"; + + Class dict() default SystemDict.class; +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java new file mode 100644 index 0000000..eb773ad --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java @@ -0,0 +1,328 @@ +package com.casic.missiles.modular.aop.annotion; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.modular.interfaces.dictmap.factory.DictFieldWrapperFactory; +import lombok.extern.slf4j.Slf4j; + +import java.beans.PropertyDescriptor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.*; + +import static com.casic.missiles.modular.interfaces.utils.Contrast.firstCharToLowerCase; +import static com.casic.missiles.modular.interfaces.utils.Contrast.firstCharToUpperCase; + +@Slf4j +public class ReflectionUtils { + + /** + * 直接读取对象属性值, 无视private/protected修饰符, 不经过getter函数. + * + * @param obj 读取的对象 + * @param fieldName 读取的列 + * @return 属性值 + */ + public static Object getFieldValue(final Object obj, final String fieldName) { + Field field = getAccessibleField(obj, fieldName); + if (field == null) { + throw new IllegalArgumentException("Could not find field [" + fieldName + "] on target [" + obj + "]"); + } + + Object result = null; + try { + result = field.get(obj); + } catch (IllegalAccessException e) { + log.error("不可能抛出的异常{}", e.getMessage()); + e.printStackTrace(); + } + return result; + } + + /** + * 循环向上转型, 获取对象的DeclaredField, 并强制设置为可访问.如向上转型到Object仍无法找到, 返回null. + * + * @param obj 查找的对象 + * @param fieldName 列名 + * @return 列 + */ + public static Field getAccessibleField(final Object obj, final String fieldName) { + for (Class superClass = obj.getClass(); superClass != Object.class; superClass = superClass.getSuperclass()) { + try { + Field field = superClass.getDeclaredField(fieldName); + makeAccessible(field); + return field; + } catch (NoSuchFieldException e) { // NOSONAR + // Field不在当前类定义,继续向上转型 + e.printStackTrace(); + continue; // new add + } + } + return null; + } + + /** + * 改变private/protected的成员变量为public,尽量不调用实际改动的语句,避免JDK的SecurityManager抱怨。 + * + * @param + */ + public static void makeAccessible(Field field) { + if ((!Modifier.isPublic(field.getModifiers()) || !Modifier.isPublic(field.getDeclaringClass().getModifiers()) || Modifier + .isFinal(field.getModifiers())) && !field.isAccessible()) { + field.setAccessible(true); + } + } + + /** + * 获取两个对象同名属性内容不相同的列表 + * + * @param class1 old对象 + * @param class2 new对象 + * @return 区别列表 + * @throws ClassNotFoundException 异常 + * @throws IllegalAccessException 异常 + */ + public static List> compareTwoClass(Object class1, Object class2) throws ClassNotFoundException, IllegalAccessException { + List> list = new ArrayList>(); + // 获取对象的class + Class clazz1 = class1.getClass(); + Class clazz2 = class2.getClass(); + // 获取对象的属性列表 + Field[] field1 = clazz1.getDeclaredFields(); + Field[] field2 = clazz2.getDeclaredFields(); + StringBuilder sb = new StringBuilder(); + // 遍历属性列表field1 + for (int i = 0; i < field1.length; i++) { + // 遍历属性列表field2 + for (int j = 0; j < field2.length; j++) { + // 如果field1[i]属性名与field2[j]属性名内容相同 + if (field1[i].getName().equals(field2[j].getName())) { + if (field1[i].getName().equals(field2[j].getName())) { + field1[i].setAccessible(true); + field2[j].setAccessible(true); + // 如果field1[i]属性值与field2[j]属性值内容不相同 + if (!compareTwo(field1[i].get(class1), field2[j].get(class2))) { + Map map2 = new HashMap(); + DataName name = field1[i].getAnnotation(DataName.class); + String fieldName = ""; + if (name != null) { + fieldName = name.name(); + } else { + fieldName = field1[i].getName(); + } + map2.put("name", fieldName); + map2.put("old", field1[i].get(class1)); + map2.put("new", field2[j].get(class2)); + list.add(map2); + } + break; + } + } + } + } + return list; + } + + /** + * 对比两个数据是否内容相同 + * + * @param object1 比较对象1 + * @param object2 比较对象2 + * @return boolean类型 + */ + public static boolean compareTwo(Object object1, Object object2) { + if (object1 == null && object2 == null) { + return true; + } + if (object1 == null && object2 != null) { + return false; + } + if (object1.equals(object2)) { + return true; + } + return false; + } + + public static String contrastObjByName(Class dictClass, String key, Object pojo1, Map pojo2) throws IllegalAccessException, InstantiationException { + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + String str = parseMutiKey(dictMap, key, pojo2) + ";;;"; + + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if (!"serialVersionUID".equals(field.getName())) { + String prefix = "get"; + int prefixLength = 3; + if (field.getType().getName().equals("java.lang.Boolean")) { + prefix = "is"; + prefixLength = 2; + } + + Method getMethod = null; + + try { + getMethod = clazz.getDeclaredMethod(prefix + firstCharToUpperCase(field.getName())); + } catch (NoSuchMethodException var22) { + System.err.println("this className:" + clazz.getName() + " is not methodName: " + var22.getMessage()); + continue; + } + + Object o1 = getMethod.invoke(pojo1); + Object o2 = pojo2.get(firstCharToLowerCase(getMethod.getName().substring(prefixLength))); + if (o1 != null && o2 != null) { + if (o1 instanceof Date) { + o1 = DateUtil.format(new Date(), "yyyy-MM-dd"); + } else if (o1 instanceof Integer) { + o2 = Integer.parseInt(o2.toString()); + } + + if (!o1.toString().equals(o2.toString())) { + if (i != 1) { + str = str + ";;;"; + } + + String fieldName = dictMap.get(field.getName()); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(field.getName()); + if (fieldWarpperMethodName != null) { + Object o1Warpper = DictFieldWrapperFactory.createFieldWrapper(o1, fieldWarpperMethodName); + Object o2Warpper = DictFieldWrapperFactory.createFieldWrapper(o2, fieldWarpperMethodName); + str = str + "字段名称:" + fieldName + ",旧值:" + o1Warpper + ",新值:" + o2Warpper; + } else { + str = str + "字段名称:" + fieldName + ",旧值:" + o1 + ",新值:" + o2; + } + + ++i; + } + } + } + } + } catch (Exception var23) { + var23.printStackTrace(); + } + + return str; + } + + public static String parseMutiKey(AbstractDictMap dictMap, String key, Map requests) { + StringBuilder sb = new StringBuilder(); + if (key.indexOf(",") != -1) { + String[] keys = key.split(","); + String[] var13 = keys; + int var14 = keys.length; + + for (int var7 = 0; var7 < var14; ++var7) { + String item = var13[var7].trim(); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(item); + Object value = requests.get(item); + if (fieldWarpperMethodName != null) { + Object valueWarpper = DictFieldWrapperFactory.createFieldWrapper(value, fieldWarpperMethodName); + sb.append(dictMap.get(item) + "=" + valueWarpper + ","); + } else { + sb.append(dictMap.get(item) + "=" + (ObjectUtil.isNotEmpty(value) ? value.toString() : "") + ","); + } + } + + return StrUtil.removeSuffix(sb.toString(), ","); + } else { + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(key); + Object value = requests.get(key); + if (fieldWarpperMethodName != null) { + Object valueWarpper = DictFieldWrapperFactory.createFieldWrapper(value, fieldWarpperMethodName); + sb.append(dictMap.get(key) + "=" + valueWarpper); + } else { + sb.append(dictMap.get(key) + "=" + (ObjectUtil.isNotEmpty(value) ? value.toString() : "")); + } + + return sb.toString(); + } + } + + public static String getDeleteKeys(Object pojo1) { + String str = ""; + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if ("keys".equals(field.getName())) { + PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); + Method getMethod = pd.getReadMethod(); + Object o1 = getMethod.invoke(pojo1); + return ObjectUtil.isNotEmpty(o1) ? o1.toString().replaceAll("\\[|]", "") : "".concat(",已删除"); + } + } + + } catch (Exception var21) { + var21.printStackTrace(); + } + return str; + } + + public static String contrastObj(Class dictClass, String key, Object pojo1, Map pojo2) throws IllegalAccessException, InstantiationException { + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); +// String str = parseMutiKey(dictMap, key, pojo2) + ";;;"; + String str = ""; + + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if (!"serialVersionUID".equals(field.getName())) { + PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); + Method getMethod = pd.getReadMethod(); + Object o1 = getMethod.invoke(pojo1); + Object o2 = pojo2.get(firstCharToLowerCase(getMethod.getName().substring(3))); + if (o1 != null && o2 != null) { + if (o1 instanceof Integer) { + o2 = Integer.parseInt(o2.toString()); + } else if (o1 instanceof Date) { + o1 = DateUtil.format((Date) o1, "yyyy-MM-dd HH:mm:ss"); + } + + if (!o1.toString().equals(o2.toString())) { + if (i != 1) { + str = str + ";"; + } + + String fieldName = dictMap.get(field.getName()); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(field.getName()); + if (fieldWarpperMethodName != null) { + Object o1Warpper = DictFieldWrapperFactory.createFieldWrapper(o1, fieldWarpperMethodName); + Object o2Warpper = DictFieldWrapperFactory.createFieldWrapper(o2, fieldWarpperMethodName); + str = str + fieldName + ":将【" + o1Warpper + "】,改为【" + o2Warpper + "】"; + } else { + str = str + fieldName + ":将【" + o1 + "】,改为【" + o2 + "】"; + } + + ++i; + } + } + } + } + } catch (Exception var21) { + var21.printStackTrace(); + } + + return str; + } + + +} \ No newline at end of file diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java index 7497ebf..18fd820 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java @@ -8,12 +8,14 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.StateDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.DeviceTypeDict; import com.casic.missiles.modular.device.dto.BaseDeviceTypeDTO; import com.casic.missiles.modular.device.dto.BaseDeviceTypeIdsDTO; import com.casic.missiles.modular.device.dto.SelectDTO; @@ -63,6 +65,7 @@ return ReturnUtil.success(super.packForBT(baseDeviceTypePage)); } + @OperateLog(value = "新增设备类型", key = "typeName,watchObject,isUsed,typeDescription", dict = DeviceTypeDict.class, type = "add") @ApiOperation("增加设备类型") @PostMapping("/add") @ResponseBody @@ -71,6 +74,7 @@ return ReturnUtil.success(iBaseDeviceTypeService.saveBaseDeviceType(baseDeviceType)); } + @OperateLog(value = "编辑设备类型", dict = DeviceTypeDict.class, serviceClass = IBaseDeviceTypeService.class, type = "edit") @ApiOperation("编辑设备类型") @PostMapping("/edit") @ResponseBody @@ -81,10 +85,11 @@ return ReturnUtil.success(iBaseDeviceTypeService.updateById(baseDeviceType)); } + @OperateLog(value = "删除设备类型", key = "typeName", dict = DeviceTypeDict.class, serviceClass = IBaseDeviceTypeService.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); @@ -113,7 +118,7 @@ public ReturnDTO selectList(@RequestBody BaseDeviceTypeIdsDTO request) { QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.in(request.getDeviceTypeList()!=null&&request.getDeviceTypeList().size()>0, "id", request.getDeviceTypeList()); + queryWrapper.in(request.getDeviceTypeList() != null && request.getDeviceTypeList().size() > 0, "id", request.getDeviceTypeList()); queryWrapper.eq("IS_USED", "1"); List baseDeviceTypes = iBaseDeviceTypeService.list(queryWrapper); List selectDTOS = new ArrayList<>(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java index 42d752d..54944e2 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java @@ -3,14 +3,15 @@ import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.IdDTO; -import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.ProductDict; import com.casic.missiles.modular.device.dto.BaseProductDTO; import com.casic.missiles.modular.device.dto.SelectProductDTO; import com.casic.missiles.modular.device.entity.BaseProduct; @@ -21,7 +22,6 @@ import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; -import java.util.List; import java.util.Objects; /** @@ -49,6 +49,7 @@ return ReturnUtil.success(super.packForBT(iBaseProductService.pageList(page, requestDTO))); } + @OperateLog(value = "新增产品", key = "productName,deviceType,deviceModel,manufacturerId,protocol,accessMethod,powerSupplyMode,dataService", dict = ProductDict.class, type = "add") @ApiOperation("新增") @PostMapping("/add") @ResponseBody @@ -58,6 +59,7 @@ } + @OperateLog(value = "编辑产品", dict = ProductDict.class, serviceClass = IBaseProductService.class, type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -68,10 +70,11 @@ return ReturnUtil.success(iBaseProductService.updateBaseProductById(baseProduct)); } + @OperateLog(value = "删除产品", key = "productName", dict = ProductDict.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 509bd7b..103acf2 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 @@ -9,6 +9,7 @@ import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; @@ -17,6 +18,7 @@ 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.aop.annotion.OperateLog; import com.casic.missiles.modular.device.dict.BusConfigDict; import com.casic.missiles.modular.device.dict.DeviceDict; import com.casic.missiles.modular.device.dto.*; @@ -65,7 +67,8 @@ } - @BussinessLog(value = "新增设备", key = "devcode,deviceName,deviceType,installDate,productId", dict = DeviceDict.class) + @OperateLog(value = "新增设备", key = "devcode,deviceType,productId," + + "valid,communicationType,simId,warrantyPeriod,tagNumber,leftLength,rightLength,", dict = DeviceDict.class,type = "add") @CacheEvict(value="busLedgersCache", key="#busDevice.getDevcode()") @ApiOperation("新增") @PostMapping("/add") @@ -75,7 +78,8 @@ } - @BussinessLog(value = "编辑设备", key = "devcode,deviceName,deviceType,installDate,productId", dict = DeviceDict.class) + @OperateLog(value = "编辑设备", key = "devcode,deviceType,installDate,productId," + + "leftLength,rightLength,communicationType,simId,warrantyPeriod", dict = DeviceDict.class,serviceClass = IBusDeviceService.class,type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -86,11 +90,12 @@ return ReturnUtil.success(iBusDeviceService.updateBusDevice(busDevice)); } + @OperateLog(value = "删除设备", key = "devcode", dict = DeviceDict.class,serviceClass = IBusDeviceService.class,type = "delete") @CacheEvict(value="busLedgersCache", allEntries = true) @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 31de56e..6f35acd 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 @@ -4,8 +4,8 @@ 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.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.page.PageFactory; @@ -16,11 +16,8 @@ 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.BusDeviceDTO; -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.BusDevice; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.CommonUtil; @@ -53,6 +50,7 @@ private final IBusLedgerPipeService iBusLedgerPipeService; private final IBaseExportService iBaseExportService; + private final AbstractDictService abstractDictService; @ApiOperation("新建点位") @PostMapping("/addPosition") @@ -60,10 +58,10 @@ 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,"安装位号已存!!!"); + if (busLedgerPipeList != null && busLedgerPipeList.size() > 0) { + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE, "安装位号已存!!!"); } - Long id =IdUtil.getSnowflake(1,2).nextId(); + Long id = IdUtil.getSnowflake(1, 2).nextId(); busLedgerPipe.setId(id); busLedgerPipe.setLedgerCode(busLedgerPipe.getTagNumber()); busLedgerPipe.setArea(CommonUtil.getAreaCode(busLedgerPipe.getPosition())); @@ -139,7 +137,11 @@ page.setCurrent(1); page.setSize(Integer.MAX_VALUE); Page devicePage = iBusLedgerPipeService.listPage(page, busLedgerPipeRequestDTO); + List records = devicePage.getRecords(); try { + for (BusLedgerPipe busLedgerPipe : records) { + busLedgerPipe.setLocationCategory(abstractDictService.getDictNameByCode("locationType", busLedgerPipe.getLocationCategory())); + } iBaseExportService.exportExcel(response, BusLedgerPipe.class, devicePage.getRecords(), ExportEnum.LEDGER_PIPE_EXPORT.getSheetName()); } catch (Exception e) { e.printStackTrace(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java index e87f3f8..8040c74 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java @@ -7,10 +7,13 @@ 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.DeletesDTO; import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.ProtocolDict; import com.casic.missiles.modular.device.dto.BusProtocolDTO; import com.casic.missiles.modular.device.entity.BusProtocol; import com.casic.missiles.modular.device.service.IBusProtocolService; @@ -35,10 +38,10 @@ @RestController @RequestMapping("/system/busProtocol") public class BusProtocolController extends ExportController { - + private final IBusProtocolService protocolService; - + @ApiOperation("查询分页接口") @PostMapping("/listPage") @ResponseBody @@ -47,9 +50,10 @@ queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getProtocolName()), "PROTOCOL_NAME", requestDTO.getProtocolName()); queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getProtocolCode()), "PROTOCOL_CODE", requestDTO.getProtocolCode()); Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(protocolService.page(page,queryWrapper))); + return ReturnUtil.success(super.packForBT(protocolService.page(page, queryWrapper))); } + @OperateLog(value = "新增协议", key = "protocolName,protocolCode,version,ip,description", dict = ProtocolDict.class, type = "add") @ApiOperation("新增") @PostMapping("/add") @ResponseBody @@ -58,6 +62,7 @@ return ReturnUtil.success(protocolService.save(busProtocol)); } + @OperateLog(value = "编辑协议", dict = ProtocolDict.class, serviceClass = IBusProtocolService.class, type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -68,10 +73,11 @@ return ReturnUtil.success(protocolService.updateById(busProtocol)); } + @OperateLog(value = "删除协议", key = "protocolName", dict = ProtocolDict.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 23ddee9..24c4712 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 @@ -2,7 +2,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.entity.BusDevice; import com.casic.missiles.util.InConditionDriver; @@ -46,27 +45,27 @@ @Param("orderColumn") String orderColumn, @Param("request") CommonRequestDTO request); - @Select("SELECT BFZT from bus_device where VALID=1 and DEVCODE= #{devcode} limit 1" ) - String getBfcf( @Param("devcode") String devcode); + @Select("SELECT BFZT from bus_device where VALID=1 and DEVCODE= #{devcode} limit 1") + String getBfcf(@Param("devcode") String devcode); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getMethaneData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getMethaneData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_tube_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getTubeOtherData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_tube_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getTubeOtherData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gasliquid_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getLGData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gasliquid_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getLGData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_monitor_pipe_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getMonitorPipeOtherData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_monitor_pipe_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getMonitorPipeOtherData(@Param("devcodes") List devcodes); - @Select("SELECT ALARM_THRESHOLD FROM `alarm_rule_device` where DEVCODE = #{devcode} order by ALARM_THRESHOLD asc " ) + @Select("SELECT ALARM_THRESHOLD FROM `alarm_rule_device` where DEVCODE = #{devcode} order by ALARM_THRESHOLD asc ") List getSpecialDeviceRule(@Param("devcode") String devcode); @Select(" select ar.ALARM_THRESHOLD from alarm_rule ar where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + @@ -81,4 +80,7 @@ "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") List getListByWellId(@Param("wellId") Long wellId); + + BusDeviceOperateLogDTO getByDeviceId(@Param("id") Long id); + } 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 8ba4b15..3109344 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 @@ -44,7 +44,7 @@ LEFT JOIN base_product bp ON bd.PRODUCT_ID = bp.ID LEFT JOIN bus_device_ledger br on br.DEVICE_ID = bd.ID AND br.VALID='1' LEFT JOIN bus_manufacturer bm on bm.ID = bp.MANUFACTURER_ID - LEFT JOIN bus_ledger_all_view bl on bl.ID = br.LEDGER_ID AND br.VALID='1' and bl.type = br.type + LEFT JOIN bus_ledger_all_view bl on bl.ID = br.LEDGER_ID AND bl.VALID='1' and bl.type = br.type where bd.valid>0 @@ -95,6 +95,32 @@ + + + SELECT - rd.*, - at.alarm_type, - bt.TYPE_NAME as devTypeName - FROM - alarm_records rd - LEFT JOIN bus_ledger_all_view lr ON lr.ledgerCode = rd.LEDGER_CODE - LEFT JOIN alarm_type at ON at.ID = rd.ALARM_TYPE_ID - LEFT JOIN bus_device bd ON bd.DEVCODE = rd.DEVCODE and bd.valid >0 - LEFT JOIN base_device_type bt ON bt.id = bd.DEVICE_TYPE + rd.*, + AT.alarm_type, + bt.TYPE_NAME AS devTypeName + FROM + alarm_records rd + LEFT JOIN bus_device bd ON bd.DEVCODE = rd.DEVCODE + AND bd.valid > 0 + LEFT JOIN bus_device_ledger bl ON bd.ID = bl.DEVICE_ID + AND bl.VALID = '1' + 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' + AND lr.ledgerCode = rd.LEDGER_CODE + LEFT JOIN alarm_type AT ON AT.ID = rd.ALARM_TYPE_ID + LEFT JOIN base_device_type bt ON bt.id = bd.DEVICE_TYPE where rd.STATUS ='1' and rd.EXCEPTION_TYPE='0' @@ -695,6 +705,7 @@ dt.LOGTIME, bv.tagNumber, bv.ledgerCode, + bv.ledgerName, bdt.TYPE_NAME, bv.place, bv.type, @@ -720,6 +731,7 @@ t.tagNumber, t.ledgerCode, t.TYPE_NAME, + t.ledgerName, t.OFF_DAYS, t.LOGTIME, t.place, diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml index 7aff0f0..a63dac1 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml @@ -25,34 +25,55 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java index 3e0edd6..9dab3a7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java @@ -71,4 +71,18 @@ private Long deptid; + @ApiModelProperty("经度") + private String lngGaode; + + @ApiModelProperty("纬度") + private String latGaode; + + @ApiModelProperty("监测类型") + private String watchObject; + + @ApiModelProperty("点位id") + private Long ledgerId; + + + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java index e938da8..60464c4 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java @@ -12,6 +12,7 @@ private String deviceType; private String tagNumber; private String ledgerCode; + private String ledgerName; private String place; //台账类型 private String type; 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 ac4cabe..e623df7 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 @@ -44,6 +44,7 @@ import static cn.hutool.core.date.DateUnit.DAY; import static com.casic.missiles.util.TimeConvertUtil.TimeConverter; +import static com.casic.missiles.util.TimeConvertUtil.TimeConverterSecond; /** *

@@ -180,8 +181,8 @@ public DeviceAlarmDetailDTO deviceAlarmDetail(Long id) { DeviceAlarmDetailDTO alarmDetail = this.baseMapper.deviceAlarmDetail(id); - alarmDetail.setCancelDuration(TimeConverter(alarmDetail.getCancelDuration())); - alarmDetail.setProcessDuration(TimeConverter(alarmDetail.getProcessDuration())); + alarmDetail.setCancelDuration(TimeConverterSecond(alarmDetail.getCancelDuration())); + alarmDetail.setProcessDuration(TimeConverterSecond(alarmDetail.getProcessDuration())); alarmDetail.setDeptName(ObjectUtil.isNotEmpty(alarmDetail.getDeptid()) ? commonServer.getDeptNamesByDeptId(alarmDetail.getDeptid()) : ""); // alarmDetail.setAddress(alarmDetail.getTagNumber().concat("|").concat(alarmDetail.getLedgerName())); alarmDetail.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmDetail.getAlarmCategory())); @@ -524,16 +525,26 @@ @Override public void cancelDeviceAlarm(String devCode) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("DEVCODE", devCode); - updateWrapper.eq("EXCEPTION_TYPE", "1"); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE", devCode); + queryWrapper.eq("EXCEPTION_TYPE", "1"); //只有挂起和已处置的才消 // updateWrapper.ge("PROCESS_STATUS", "3"); - updateWrapper.eq("STATUS", "1"); - updateWrapper.set("STATUS", "0"); - updateWrapper.set("CANCEL_TIME", new Date()); - this.update(updateWrapper); - //toDo:需要加流程取消日志 + queryWrapper.eq("STATUS", "1"); + List alarmRecordsList = this.list(queryWrapper); + if (alarmRecordsList != null && alarmRecordsList.size() > 0) { + alarmRecordsList.forEach(alarmRecords -> { + alarmRecords.setStatus("0"); + alarmRecords.setCancelTime(new Date()); + alarmRecords.setPreProcessStatus(alarmRecords.getProcessStatus()); + alarmRecords.setProcessStatus(ApprovalStatusEnum.FINISHED.getCode()); + this.updateById(alarmRecords); + }); + //添加流程日志 + approvalLogMapper.insert(new ApprovalLog(alarmRecordsList.get(0).getId(), "1", + "", ApprovalStatusEnum.FINISHED.getCode(), + null)); + } } @Override @@ -674,8 +685,12 @@ AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), data.concat("%LEL"), data, - alarmRuleResponseDTO.getAlarmLevelId(),DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmLevelId(), DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmRuleResponseDTO.getAlarmTypeName(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -721,7 +736,7 @@ @Override - public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime,List busWellDTOList, + public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime, List busWellDTOList, Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { @@ -730,8 +745,12 @@ try { AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, - alarmLevelId, DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmLevelId, DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmTypeName, + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace() + , "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -793,7 +812,11 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.get().getAlarmTypeId(), alarmRuleResponseDTO.get().getAlarmTypeName(), alarmRuleResponseDTO.get().getAlarmLevelId(), DateUtil.parse(logTime), - alarmRuleResponseDTO.get().getAlarmThreshold(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "1"); + alarmRuleResponseDTO.get().getAlarmThreshold(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "1"); this.save(alarmRecords); } catch (Exception e) { e.printStackTrace(); @@ -846,8 +869,8 @@ * @param cell */ @Override - public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent,String logTime) { - this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent,DateUtil.parse(logTime)); + public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent, String logTime) { + this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent, DateUtil.parse(logTime)); } @Override @@ -903,7 +926,10 @@ offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), - offDeviceDTO.getPlace(), "1"); + ObjectUtil.isNotEmpty(offDeviceDTO.getLedgerName()) ? + offDeviceDTO.getTagNumber().concat("|"). + concat(offDeviceDTO.getLedgerName()) : + offDeviceDTO.getPlace(), "1"); alarmRecordsList.add(alarmRecords); ledgers.add(offDeviceDTO); } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java new file mode 100644 index 0000000..cb554b9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.data.dto; + + +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class PanDataDTO implements Serializable { + + private static final long serialVersionUID = 1232822221212L; + + private String dataTime; + + private String attributeType; + + private String dataValue; + + private String deviceCode; + + + +} 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 index a082d00..2a943ad 100644 --- 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 @@ -23,6 +23,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -37,6 +38,7 @@ * @author zt * @since 2025-01-22 */ +@Slf4j @RequiredArgsConstructor @Service public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { @@ -71,8 +73,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -80,8 +81,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}",devCode, e); } } @@ -141,8 +141,7 @@ } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -222,8 +221,10 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); +// e.printStackTrace(); +// log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); + } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java index dd80611..cd24860 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java @@ -83,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -124,8 +123,7 @@ busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -200,8 +198,7 @@ alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } //低电量报警处理 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 302b446..f0def39 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 @@ -76,8 +76,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -85,8 +84,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -133,8 +131,7 @@ if (i < jsonArray.size() - 1) continue; busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -217,8 +214,7 @@ } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } 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 e5ba8f7..a02af88 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataMonitorPipeOtherServiceImpl extends ServiceImpl implements IDataMonitorPipeOtherService, IDataAbstractService { @@ -73,8 +75,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -116,8 +116,7 @@ //2.写入新的报警 alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + log.error("处理报警时发生异常,devcode:{},e:{}", devCode, e); } } } @@ -160,8 +159,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmEventCode)); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -341,8 +339,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag || ObjectUtil.isNotEmpty(alarmContent) ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java index 5dc8c2b..f383690 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java @@ -2,7 +2,6 @@ import cn.hutool.core.date.DateUtil; 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; @@ -13,15 +12,20 @@ import com.casic.missiles.modular.alarm.service.IAlarmRuleService; import com.casic.missiles.modular.data.dao.DataGasMapper; import com.casic.missiles.modular.data.dao.DataPanGasMapper; +import com.casic.missiles.modular.data.dto.PanDataDTO; import com.casic.missiles.modular.data.entity.DataPanGas; import com.casic.missiles.modular.data.service.IDataPanGasService; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.CommonUtil; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonToken; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.io.IOException; import java.util.Date; import java.util.List; import java.util.Map; @@ -68,78 +72,179 @@ } - @Transactional @Override public boolean processAcceptGasData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); - JSONArray jsonArray = jsonObject.getJSONArray("data"); - String devCode = ""; - for (int i = 0; i < jsonArray.size(); i++) { - try { - devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); - if (ObjectUtil.isEmpty(devCode)) continue; - List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); - String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); - String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); - //暂只存浓度 - if ("2".equals(attributeType)) continue; - String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); - gas = String.format("%.2f", Double.valueOf(gas)); - //1.存数据 - save(DataPanGas.builder() - .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") - .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") - .deviceCode(devCode) - .concentration(gas) - .logtime(DateUtil.parseDateTime(dataTime)) - .build());//存储采集数据 - //2.有无超限处理流程(判断最后一条数据) -// if (i < jsonArray.size() - 1) continue; - - //3.清除设备告警 - alarmRecordsService.cancelDeviceAlarm(devCode); - //4.存报警 - //若没绑场站,则不产生报警 - boolean alarmFlag = false; - String bfcf = busDeviceService.getBfcf(devCode); - 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))) { - dataTime = dataTime.replaceAll("-", ""); - dataTime = dataTime.replaceAll(":", ""); - dataTime = dataTime.replaceAll("\\s+", ""); - alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); - } - break; - } - } - } - //5.清数据报警 - if (!alarmFlag) { - alarmRecordsService.cancelDataAlarm(devCode); - } - //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); - //7.更新监测井状态 (1:正常,2:报警) - if (busWellDTOList != null && busWellDTOList.size() > 0) { - alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); - } - } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + JsonFactory factory = new JsonFactory(); + try (JsonParser parser = factory.createParser(jsonObject.getString("data"))) { + // 定位到 "data" 数组 + while (parser.nextToken() != JsonToken.START_ARRAY) { + parser.nextToken(); } + // 逐条处理数据 + while (parser.nextToken() != JsonToken.END_ARRAY) { + if (parser.getCurrentToken() == JsonToken.START_OBJECT) { + processSingleData(parseJsonObject(parser)); + } + + } + } catch (IOException e) { + e.printStackTrace(); } + return true; } + private PanDataDTO parseJsonObject(JsonParser parser) throws IOException { + PanDataDTO panDataDTO = new PanDataDTO(); + while (parser.nextToken() != JsonToken.END_OBJECT) { + String fieldName = parser.getCurrentName(); + if ("dataTime".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataTime(parser.getText()); + } else if ("attributeType".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setAttributeType(parser.getText()); + } else if ("dataValue".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataValue(parser.getText()); + } else if ("deviceCode".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDeviceCode(parser.getText()); + } + } + return panDataDTO; + } + + + private void processSingleData(PanDataDTO panDataDTO) { + try { + String devCode = panDataDTO.getDeviceCode(); + if (ObjectUtil.isEmpty(devCode)) return; + List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); + String gas = panDataDTO.getDataValue(); + String attributeType = panDataDTO.getAttributeType(); + //暂只存浓度 + if ("2".equals(attributeType)) return; + String dataTime = panDataDTO.getDataTime(); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataPanGas.builder() + .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .deviceCode(devCode) + .concentration(gas) + .logtime(DateUtil.parseDateTime(dataTime)) + .build());//存储采集数据 + + boolean alarmFlag = false; + String bfcf = busDeviceService.getBfcf(devCode); + 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))) { +// dataTime = dataTime.replaceAll("-", ""); +// dataTime = dataTime.replaceAll(":", ""); +// dataTime = dataTime.replaceAll("\\s+", ""); + alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); + //7.更新监测井状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + log.error("处理云台数据时发生异常,devcode:{},data:{},e:{}", panDataDTO.getDeviceCode(), panDataDTO.toString(), e); + } + } + + +// @Transactional +// @Override +// public boolean processAcceptGasData(Map dataParams) { +// JSONObject jsonObject = new JSONObject(dataParams); +// JSONArray jsonArray = jsonObject.getJSONArray("data"); +// String devCode = ""; +// for (int i = 0; i < jsonArray.size(); i++) { +// try { +// devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); +// if (ObjectUtil.isEmpty(devCode)) continue; +// List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); +// String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); +// String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); +// //暂只存浓度 +// if ("2".equals(attributeType)) continue; +// String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); +// gas = String.format("%.2f", Double.valueOf(gas)); +// //1.存数据 +// save(DataPanGas.builder() +// .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") +// .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") +// .deviceCode(devCode) +// .concentration(gas) +// .logtime(DateUtil.parseDateTime(dataTime)) +// .build());//存储采集数据 +// //2.有无超限处理流程(判断最后一条数据) +//// if (i < jsonArray.size() - 1) continue; +// +// //3.清除设备告警 +//// alarmRecordsService.cancelDeviceAlarm(devCode); +// //4.存报警 +// //若没绑场站,则不产生报警 +// boolean alarmFlag = false; +// String bfcf = busDeviceService.getBfcf(devCode); +// 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))) { +//// dataTime = dataTime.replaceAll("-", ""); +//// dataTime = dataTime.replaceAll(":", ""); +//// dataTime = dataTime.replaceAll("\\s+", ""); +// alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); +// } +// break; +// } +// } +// } +// //5.清数据报警 +// if (!alarmFlag) { +// alarmRecordsService.cancelDataAlarm(devCode); +// } +// //6.更新电量及状态 (1:正常,2:报警) +// alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); +// //7.更新监测井状态 (1:正常,2:报警) +// if (busWellDTOList != null && busWellDTOList.size() > 0) { +// alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); +// } +// } catch (Exception e) { +// log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); +// } +// } +// return true; +// } + @Override public boolean acceptAlarmData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); 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 37d731d..a17953b 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataTubeOtherServiceImpl extends ServiceImpl implements IDataTubeOtherService, IDataAbstractService { @@ -73,7 +75,7 @@ } } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,7 +84,7 @@ imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -122,8 +124,8 @@ } //特殊处理消警 if ("CancelWaterImmersionAlarm".equals(alarmType)) { - if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { - alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + if (alarmRecordsService.isWatchAlarms(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelWatchAlarms(devCode, "WaterImmersionAlarm"); } continue; } @@ -146,8 +148,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmType)); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -227,8 +228,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java new file mode 100644 index 0000000..3be65dd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java @@ -0,0 +1,170 @@ +package com.casic.missiles.modular.aop; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.aop.annotion.ReflectionUtils; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.modular.interfaces.log.LogManager; +import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.Serializable; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Aspect +@Component +public class OperateLogAspect { + private Logger log = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private ApplicationContext applicationContext; + + public static volatile Map oldMap = new HashMap<>(); + + public OperateLogAspect() { + } + + @Pointcut("@annotation(com.casic.missiles.modular.aop.annotion.OperateLog)") + public void cutService() { + } + + @Around("cutService()") + public Object recordSysLog(ProceedingJoinPoint point) throws Throwable { + Object result = point.proceed(); + + try { + this.handle(point); + } catch (Exception var4) { + this.log.error("日志记录出错!", var4); + } + + return result; + } + + /** + * 处理请求前执行 + */ + @Before(value = "@annotation(operateLog)") + public void boBefore(JoinPoint joinPoint, OperateLog operateLog) { + Object info = joinPoint.getArgs()[0]; + if ("edit".equals(operateLog.type()) && operateLog.needDefaultCompare()) { + Class cls = operateLog.serviceClass(); + IService service = (IService) applicationContext.getBean(cls); + Object result; + if (service instanceof IBusDeviceService) { + result = ((IBusDeviceService) service).getByDeviceId((Long) ReflectionUtils.getFieldValue(info, "id")); + } else + result = service.getById((Serializable) ReflectionUtils.getFieldValue(info, "id")); + oldMap = (Map) objectToMap(result); // 存储修改前的对象 + } + } + + private void handle(ProceedingJoinPoint point) throws Exception { + Signature sig = point.getSignature(); + MethodSignature msig = null; + if (!(sig instanceof MethodSignature)) { + throw new IllegalArgumentException("该注解只能用于方法"); + } else { + msig = (MethodSignature) sig; + Object target = point.getTarget(); + Method currentMethod = target.getClass().getMethod(msig.getName(), msig.getParameterTypes()); + String methodName = currentMethod.getName(); + AuthUser user = ShiroKit.getUser(); + if (null != user) { + String className = point.getTarget().getClass().getName(); + Object[] params = point.getArgs(); + OperateLog annotation = (OperateLog) currentMethod.getAnnotation(OperateLog.class); + String bussinessName = annotation.value(); + String key = annotation.key(); + Class dictClass = annotation.dict(); + String sb = argsArrayToString(params); + String msg = sb; + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + if ("add".equals(annotation.type())) { + Map parameters = (Map) objectToMap(params[0]); + msg = CollectionUtils.isEmpty(parameters) ? sb : ReflectionUtils.parseMutiKey(dictMap, key, parameters); + } else if ("edit".equals(annotation.type())) { + msg = CollectionUtils.isEmpty(oldMap) ? sb : ReflectionUtils.contrastObj(dictClass, key, params[0], oldMap); + }else if("delete".equals(annotation.type())){ + msg=dictMap.get(annotation.key())+":"+ReflectionUtils.getDeleteKeys(params[0]); + } + LogManager.me().executeLog(LogTaskFactory.bussinessLog(user.getId(), bussinessName, className, methodName, msg)); + } + } + } + + + /** + * 参数拼装 + */ + private String argsArrayToString(Object[] paramsArray) { + Gson gson = new GsonBuilder().create(); + String params = ""; + if (paramsArray != null && paramsArray.length > 0) { + for (int i = 0; i < paramsArray.length; i++) { + if (!isFilterObject(paramsArray[i])) { + params += gson.toJson(paramsArray[i]) + " & "; + } + } + } + return params.trim(); + } + + + /** + * 判断是否需要过滤的对象。 + * + * @param o 对象信息。 + * @return 如果是需要过滤的对象,则返回true;否则返回false。 + */ + public boolean isFilterObject(final Object o) { + return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse; + } + + private Map objectToMap(Object obj) { + if (obj == null) { + return null; + } + ObjectMapper mapper = new ObjectMapper(); + mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + // 如果使用JPA请自己打开这条配置 + // mapper.addMixIn(Object.class, IgnoreHibernatePropertiesInJackson.class); + Map mappedObject = mapper.convertValue(obj, Map.class); + return mappedObject; + + + } +} + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java new file mode 100644 index 0000000..77afa9c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.aop.annotion; + +import java.lang.annotation.*; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.FIELD}) +@Documented +public @interface DataName { + String name() default ""; // 字段名称 + + /** + * 读取枚举内容转义表达式 (如: 0=男,1=女,2=未知) + */ + String readConverterExp() default ""; +} + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java new file mode 100644 index 0000000..f1f59ad --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.aop.annotion; + + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.common.constant.dictmap.base.SystemDict; + +import java.lang.annotation.*; + +@Inherited +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.METHOD}) +public @interface OperateLog { + String value() default ""; + + String key() default "id"; + + Class serviceClass() default IService.class; + + // 是否需要比较新旧数据 + boolean needDefaultCompare() default true; + + //操作类型 add update delete + String type() default "update"; + + Class dict() default SystemDict.class; +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java new file mode 100644 index 0000000..eb773ad --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java @@ -0,0 +1,328 @@ +package com.casic.missiles.modular.aop.annotion; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.modular.interfaces.dictmap.factory.DictFieldWrapperFactory; +import lombok.extern.slf4j.Slf4j; + +import java.beans.PropertyDescriptor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.*; + +import static com.casic.missiles.modular.interfaces.utils.Contrast.firstCharToLowerCase; +import static com.casic.missiles.modular.interfaces.utils.Contrast.firstCharToUpperCase; + +@Slf4j +public class ReflectionUtils { + + /** + * 直接读取对象属性值, 无视private/protected修饰符, 不经过getter函数. + * + * @param obj 读取的对象 + * @param fieldName 读取的列 + * @return 属性值 + */ + public static Object getFieldValue(final Object obj, final String fieldName) { + Field field = getAccessibleField(obj, fieldName); + if (field == null) { + throw new IllegalArgumentException("Could not find field [" + fieldName + "] on target [" + obj + "]"); + } + + Object result = null; + try { + result = field.get(obj); + } catch (IllegalAccessException e) { + log.error("不可能抛出的异常{}", e.getMessage()); + e.printStackTrace(); + } + return result; + } + + /** + * 循环向上转型, 获取对象的DeclaredField, 并强制设置为可访问.如向上转型到Object仍无法找到, 返回null. + * + * @param obj 查找的对象 + * @param fieldName 列名 + * @return 列 + */ + public static Field getAccessibleField(final Object obj, final String fieldName) { + for (Class superClass = obj.getClass(); superClass != Object.class; superClass = superClass.getSuperclass()) { + try { + Field field = superClass.getDeclaredField(fieldName); + makeAccessible(field); + return field; + } catch (NoSuchFieldException e) { // NOSONAR + // Field不在当前类定义,继续向上转型 + e.printStackTrace(); + continue; // new add + } + } + return null; + } + + /** + * 改变private/protected的成员变量为public,尽量不调用实际改动的语句,避免JDK的SecurityManager抱怨。 + * + * @param + */ + public static void makeAccessible(Field field) { + if ((!Modifier.isPublic(field.getModifiers()) || !Modifier.isPublic(field.getDeclaringClass().getModifiers()) || Modifier + .isFinal(field.getModifiers())) && !field.isAccessible()) { + field.setAccessible(true); + } + } + + /** + * 获取两个对象同名属性内容不相同的列表 + * + * @param class1 old对象 + * @param class2 new对象 + * @return 区别列表 + * @throws ClassNotFoundException 异常 + * @throws IllegalAccessException 异常 + */ + public static List> compareTwoClass(Object class1, Object class2) throws ClassNotFoundException, IllegalAccessException { + List> list = new ArrayList>(); + // 获取对象的class + Class clazz1 = class1.getClass(); + Class clazz2 = class2.getClass(); + // 获取对象的属性列表 + Field[] field1 = clazz1.getDeclaredFields(); + Field[] field2 = clazz2.getDeclaredFields(); + StringBuilder sb = new StringBuilder(); + // 遍历属性列表field1 + for (int i = 0; i < field1.length; i++) { + // 遍历属性列表field2 + for (int j = 0; j < field2.length; j++) { + // 如果field1[i]属性名与field2[j]属性名内容相同 + if (field1[i].getName().equals(field2[j].getName())) { + if (field1[i].getName().equals(field2[j].getName())) { + field1[i].setAccessible(true); + field2[j].setAccessible(true); + // 如果field1[i]属性值与field2[j]属性值内容不相同 + if (!compareTwo(field1[i].get(class1), field2[j].get(class2))) { + Map map2 = new HashMap(); + DataName name = field1[i].getAnnotation(DataName.class); + String fieldName = ""; + if (name != null) { + fieldName = name.name(); + } else { + fieldName = field1[i].getName(); + } + map2.put("name", fieldName); + map2.put("old", field1[i].get(class1)); + map2.put("new", field2[j].get(class2)); + list.add(map2); + } + break; + } + } + } + } + return list; + } + + /** + * 对比两个数据是否内容相同 + * + * @param object1 比较对象1 + * @param object2 比较对象2 + * @return boolean类型 + */ + public static boolean compareTwo(Object object1, Object object2) { + if (object1 == null && object2 == null) { + return true; + } + if (object1 == null && object2 != null) { + return false; + } + if (object1.equals(object2)) { + return true; + } + return false; + } + + public static String contrastObjByName(Class dictClass, String key, Object pojo1, Map pojo2) throws IllegalAccessException, InstantiationException { + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + String str = parseMutiKey(dictMap, key, pojo2) + ";;;"; + + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if (!"serialVersionUID".equals(field.getName())) { + String prefix = "get"; + int prefixLength = 3; + if (field.getType().getName().equals("java.lang.Boolean")) { + prefix = "is"; + prefixLength = 2; + } + + Method getMethod = null; + + try { + getMethod = clazz.getDeclaredMethod(prefix + firstCharToUpperCase(field.getName())); + } catch (NoSuchMethodException var22) { + System.err.println("this className:" + clazz.getName() + " is not methodName: " + var22.getMessage()); + continue; + } + + Object o1 = getMethod.invoke(pojo1); + Object o2 = pojo2.get(firstCharToLowerCase(getMethod.getName().substring(prefixLength))); + if (o1 != null && o2 != null) { + if (o1 instanceof Date) { + o1 = DateUtil.format(new Date(), "yyyy-MM-dd"); + } else if (o1 instanceof Integer) { + o2 = Integer.parseInt(o2.toString()); + } + + if (!o1.toString().equals(o2.toString())) { + if (i != 1) { + str = str + ";;;"; + } + + String fieldName = dictMap.get(field.getName()); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(field.getName()); + if (fieldWarpperMethodName != null) { + Object o1Warpper = DictFieldWrapperFactory.createFieldWrapper(o1, fieldWarpperMethodName); + Object o2Warpper = DictFieldWrapperFactory.createFieldWrapper(o2, fieldWarpperMethodName); + str = str + "字段名称:" + fieldName + ",旧值:" + o1Warpper + ",新值:" + o2Warpper; + } else { + str = str + "字段名称:" + fieldName + ",旧值:" + o1 + ",新值:" + o2; + } + + ++i; + } + } + } + } + } catch (Exception var23) { + var23.printStackTrace(); + } + + return str; + } + + public static String parseMutiKey(AbstractDictMap dictMap, String key, Map requests) { + StringBuilder sb = new StringBuilder(); + if (key.indexOf(",") != -1) { + String[] keys = key.split(","); + String[] var13 = keys; + int var14 = keys.length; + + for (int var7 = 0; var7 < var14; ++var7) { + String item = var13[var7].trim(); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(item); + Object value = requests.get(item); + if (fieldWarpperMethodName != null) { + Object valueWarpper = DictFieldWrapperFactory.createFieldWrapper(value, fieldWarpperMethodName); + sb.append(dictMap.get(item) + "=" + valueWarpper + ","); + } else { + sb.append(dictMap.get(item) + "=" + (ObjectUtil.isNotEmpty(value) ? value.toString() : "") + ","); + } + } + + return StrUtil.removeSuffix(sb.toString(), ","); + } else { + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(key); + Object value = requests.get(key); + if (fieldWarpperMethodName != null) { + Object valueWarpper = DictFieldWrapperFactory.createFieldWrapper(value, fieldWarpperMethodName); + sb.append(dictMap.get(key) + "=" + valueWarpper); + } else { + sb.append(dictMap.get(key) + "=" + (ObjectUtil.isNotEmpty(value) ? value.toString() : "")); + } + + return sb.toString(); + } + } + + public static String getDeleteKeys(Object pojo1) { + String str = ""; + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if ("keys".equals(field.getName())) { + PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); + Method getMethod = pd.getReadMethod(); + Object o1 = getMethod.invoke(pojo1); + return ObjectUtil.isNotEmpty(o1) ? o1.toString().replaceAll("\\[|]", "") : "".concat(",已删除"); + } + } + + } catch (Exception var21) { + var21.printStackTrace(); + } + return str; + } + + public static String contrastObj(Class dictClass, String key, Object pojo1, Map pojo2) throws IllegalAccessException, InstantiationException { + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); +// String str = parseMutiKey(dictMap, key, pojo2) + ";;;"; + String str = ""; + + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if (!"serialVersionUID".equals(field.getName())) { + PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); + Method getMethod = pd.getReadMethod(); + Object o1 = getMethod.invoke(pojo1); + Object o2 = pojo2.get(firstCharToLowerCase(getMethod.getName().substring(3))); + if (o1 != null && o2 != null) { + if (o1 instanceof Integer) { + o2 = Integer.parseInt(o2.toString()); + } else if (o1 instanceof Date) { + o1 = DateUtil.format((Date) o1, "yyyy-MM-dd HH:mm:ss"); + } + + if (!o1.toString().equals(o2.toString())) { + if (i != 1) { + str = str + ";"; + } + + String fieldName = dictMap.get(field.getName()); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(field.getName()); + if (fieldWarpperMethodName != null) { + Object o1Warpper = DictFieldWrapperFactory.createFieldWrapper(o1, fieldWarpperMethodName); + Object o2Warpper = DictFieldWrapperFactory.createFieldWrapper(o2, fieldWarpperMethodName); + str = str + fieldName + ":将【" + o1Warpper + "】,改为【" + o2Warpper + "】"; + } else { + str = str + fieldName + ":将【" + o1 + "】,改为【" + o2 + "】"; + } + + ++i; + } + } + } + } + } catch (Exception var21) { + var21.printStackTrace(); + } + + return str; + } + + +} \ No newline at end of file diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java index 7497ebf..18fd820 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java @@ -8,12 +8,14 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.StateDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.DeviceTypeDict; import com.casic.missiles.modular.device.dto.BaseDeviceTypeDTO; import com.casic.missiles.modular.device.dto.BaseDeviceTypeIdsDTO; import com.casic.missiles.modular.device.dto.SelectDTO; @@ -63,6 +65,7 @@ return ReturnUtil.success(super.packForBT(baseDeviceTypePage)); } + @OperateLog(value = "新增设备类型", key = "typeName,watchObject,isUsed,typeDescription", dict = DeviceTypeDict.class, type = "add") @ApiOperation("增加设备类型") @PostMapping("/add") @ResponseBody @@ -71,6 +74,7 @@ return ReturnUtil.success(iBaseDeviceTypeService.saveBaseDeviceType(baseDeviceType)); } + @OperateLog(value = "编辑设备类型", dict = DeviceTypeDict.class, serviceClass = IBaseDeviceTypeService.class, type = "edit") @ApiOperation("编辑设备类型") @PostMapping("/edit") @ResponseBody @@ -81,10 +85,11 @@ return ReturnUtil.success(iBaseDeviceTypeService.updateById(baseDeviceType)); } + @OperateLog(value = "删除设备类型", key = "typeName", dict = DeviceTypeDict.class, serviceClass = IBaseDeviceTypeService.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); @@ -113,7 +118,7 @@ public ReturnDTO selectList(@RequestBody BaseDeviceTypeIdsDTO request) { QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.in(request.getDeviceTypeList()!=null&&request.getDeviceTypeList().size()>0, "id", request.getDeviceTypeList()); + queryWrapper.in(request.getDeviceTypeList() != null && request.getDeviceTypeList().size() > 0, "id", request.getDeviceTypeList()); queryWrapper.eq("IS_USED", "1"); List baseDeviceTypes = iBaseDeviceTypeService.list(queryWrapper); List selectDTOS = new ArrayList<>(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java index 42d752d..54944e2 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java @@ -3,14 +3,15 @@ import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.IdDTO; -import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.ProductDict; import com.casic.missiles.modular.device.dto.BaseProductDTO; import com.casic.missiles.modular.device.dto.SelectProductDTO; import com.casic.missiles.modular.device.entity.BaseProduct; @@ -21,7 +22,6 @@ import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; -import java.util.List; import java.util.Objects; /** @@ -49,6 +49,7 @@ return ReturnUtil.success(super.packForBT(iBaseProductService.pageList(page, requestDTO))); } + @OperateLog(value = "新增产品", key = "productName,deviceType,deviceModel,manufacturerId,protocol,accessMethod,powerSupplyMode,dataService", dict = ProductDict.class, type = "add") @ApiOperation("新增") @PostMapping("/add") @ResponseBody @@ -58,6 +59,7 @@ } + @OperateLog(value = "编辑产品", dict = ProductDict.class, serviceClass = IBaseProductService.class, type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -68,10 +70,11 @@ return ReturnUtil.success(iBaseProductService.updateBaseProductById(baseProduct)); } + @OperateLog(value = "删除产品", key = "productName", dict = ProductDict.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 509bd7b..103acf2 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 @@ -9,6 +9,7 @@ import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; @@ -17,6 +18,7 @@ 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.aop.annotion.OperateLog; import com.casic.missiles.modular.device.dict.BusConfigDict; import com.casic.missiles.modular.device.dict.DeviceDict; import com.casic.missiles.modular.device.dto.*; @@ -65,7 +67,8 @@ } - @BussinessLog(value = "新增设备", key = "devcode,deviceName,deviceType,installDate,productId", dict = DeviceDict.class) + @OperateLog(value = "新增设备", key = "devcode,deviceType,productId," + + "valid,communicationType,simId,warrantyPeriod,tagNumber,leftLength,rightLength,", dict = DeviceDict.class,type = "add") @CacheEvict(value="busLedgersCache", key="#busDevice.getDevcode()") @ApiOperation("新增") @PostMapping("/add") @@ -75,7 +78,8 @@ } - @BussinessLog(value = "编辑设备", key = "devcode,deviceName,deviceType,installDate,productId", dict = DeviceDict.class) + @OperateLog(value = "编辑设备", key = "devcode,deviceType,installDate,productId," + + "leftLength,rightLength,communicationType,simId,warrantyPeriod", dict = DeviceDict.class,serviceClass = IBusDeviceService.class,type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -86,11 +90,12 @@ return ReturnUtil.success(iBusDeviceService.updateBusDevice(busDevice)); } + @OperateLog(value = "删除设备", key = "devcode", dict = DeviceDict.class,serviceClass = IBusDeviceService.class,type = "delete") @CacheEvict(value="busLedgersCache", allEntries = true) @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 31de56e..6f35acd 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 @@ -4,8 +4,8 @@ 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.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.page.PageFactory; @@ -16,11 +16,8 @@ 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.BusDeviceDTO; -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.BusDevice; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.CommonUtil; @@ -53,6 +50,7 @@ private final IBusLedgerPipeService iBusLedgerPipeService; private final IBaseExportService iBaseExportService; + private final AbstractDictService abstractDictService; @ApiOperation("新建点位") @PostMapping("/addPosition") @@ -60,10 +58,10 @@ 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,"安装位号已存!!!"); + if (busLedgerPipeList != null && busLedgerPipeList.size() > 0) { + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE, "安装位号已存!!!"); } - Long id =IdUtil.getSnowflake(1,2).nextId(); + Long id = IdUtil.getSnowflake(1, 2).nextId(); busLedgerPipe.setId(id); busLedgerPipe.setLedgerCode(busLedgerPipe.getTagNumber()); busLedgerPipe.setArea(CommonUtil.getAreaCode(busLedgerPipe.getPosition())); @@ -139,7 +137,11 @@ page.setCurrent(1); page.setSize(Integer.MAX_VALUE); Page devicePage = iBusLedgerPipeService.listPage(page, busLedgerPipeRequestDTO); + List records = devicePage.getRecords(); try { + for (BusLedgerPipe busLedgerPipe : records) { + busLedgerPipe.setLocationCategory(abstractDictService.getDictNameByCode("locationType", busLedgerPipe.getLocationCategory())); + } iBaseExportService.exportExcel(response, BusLedgerPipe.class, devicePage.getRecords(), ExportEnum.LEDGER_PIPE_EXPORT.getSheetName()); } catch (Exception e) { e.printStackTrace(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java index e87f3f8..8040c74 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java @@ -7,10 +7,13 @@ 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.DeletesDTO; import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.ProtocolDict; import com.casic.missiles.modular.device.dto.BusProtocolDTO; import com.casic.missiles.modular.device.entity.BusProtocol; import com.casic.missiles.modular.device.service.IBusProtocolService; @@ -35,10 +38,10 @@ @RestController @RequestMapping("/system/busProtocol") public class BusProtocolController extends ExportController { - + private final IBusProtocolService protocolService; - + @ApiOperation("查询分页接口") @PostMapping("/listPage") @ResponseBody @@ -47,9 +50,10 @@ queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getProtocolName()), "PROTOCOL_NAME", requestDTO.getProtocolName()); queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getProtocolCode()), "PROTOCOL_CODE", requestDTO.getProtocolCode()); Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(protocolService.page(page,queryWrapper))); + return ReturnUtil.success(super.packForBT(protocolService.page(page, queryWrapper))); } + @OperateLog(value = "新增协议", key = "protocolName,protocolCode,version,ip,description", dict = ProtocolDict.class, type = "add") @ApiOperation("新增") @PostMapping("/add") @ResponseBody @@ -58,6 +62,7 @@ return ReturnUtil.success(protocolService.save(busProtocol)); } + @OperateLog(value = "编辑协议", dict = ProtocolDict.class, serviceClass = IBusProtocolService.class, type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -68,10 +73,11 @@ return ReturnUtil.success(protocolService.updateById(busProtocol)); } + @OperateLog(value = "删除协议", key = "protocolName", dict = ProtocolDict.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 23ddee9..24c4712 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 @@ -2,7 +2,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.entity.BusDevice; import com.casic.missiles.util.InConditionDriver; @@ -46,27 +45,27 @@ @Param("orderColumn") String orderColumn, @Param("request") CommonRequestDTO request); - @Select("SELECT BFZT from bus_device where VALID=1 and DEVCODE= #{devcode} limit 1" ) - String getBfcf( @Param("devcode") String devcode); + @Select("SELECT BFZT from bus_device where VALID=1 and DEVCODE= #{devcode} limit 1") + String getBfcf(@Param("devcode") String devcode); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getMethaneData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getMethaneData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_tube_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getTubeOtherData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_tube_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getTubeOtherData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gasliquid_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getLGData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gasliquid_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getLGData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_monitor_pipe_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getMonitorPipeOtherData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_monitor_pipe_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getMonitorPipeOtherData(@Param("devcodes") List devcodes); - @Select("SELECT ALARM_THRESHOLD FROM `alarm_rule_device` where DEVCODE = #{devcode} order by ALARM_THRESHOLD asc " ) + @Select("SELECT ALARM_THRESHOLD FROM `alarm_rule_device` where DEVCODE = #{devcode} order by ALARM_THRESHOLD asc ") List getSpecialDeviceRule(@Param("devcode") String devcode); @Select(" select ar.ALARM_THRESHOLD from alarm_rule ar where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + @@ -81,4 +80,7 @@ "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") List getListByWellId(@Param("wellId") Long wellId); + + BusDeviceOperateLogDTO getByDeviceId(@Param("id") Long id); + } 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 8ba4b15..3109344 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 @@ -44,7 +44,7 @@ LEFT JOIN base_product bp ON bd.PRODUCT_ID = bp.ID LEFT JOIN bus_device_ledger br on br.DEVICE_ID = bd.ID AND br.VALID='1' LEFT JOIN bus_manufacturer bm on bm.ID = bp.MANUFACTURER_ID - LEFT JOIN bus_ledger_all_view bl on bl.ID = br.LEDGER_ID AND br.VALID='1' and bl.type = br.type + LEFT JOIN bus_ledger_all_view bl on bl.ID = br.LEDGER_ID AND bl.VALID='1' and bl.type = br.type where bd.valid>0 @@ -95,6 +95,32 @@ + + + SELECT - rd.*, - at.alarm_type, - bt.TYPE_NAME as devTypeName - FROM - alarm_records rd - LEFT JOIN bus_ledger_all_view lr ON lr.ledgerCode = rd.LEDGER_CODE - LEFT JOIN alarm_type at ON at.ID = rd.ALARM_TYPE_ID - LEFT JOIN bus_device bd ON bd.DEVCODE = rd.DEVCODE and bd.valid >0 - LEFT JOIN base_device_type bt ON bt.id = bd.DEVICE_TYPE + rd.*, + AT.alarm_type, + bt.TYPE_NAME AS devTypeName + FROM + alarm_records rd + LEFT JOIN bus_device bd ON bd.DEVCODE = rd.DEVCODE + AND bd.valid > 0 + LEFT JOIN bus_device_ledger bl ON bd.ID = bl.DEVICE_ID + AND bl.VALID = '1' + 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' + AND lr.ledgerCode = rd.LEDGER_CODE + LEFT JOIN alarm_type AT ON AT.ID = rd.ALARM_TYPE_ID + LEFT JOIN base_device_type bt ON bt.id = bd.DEVICE_TYPE where rd.STATUS ='1' and rd.EXCEPTION_TYPE='0' @@ -695,6 +705,7 @@ dt.LOGTIME, bv.tagNumber, bv.ledgerCode, + bv.ledgerName, bdt.TYPE_NAME, bv.place, bv.type, @@ -720,6 +731,7 @@ t.tagNumber, t.ledgerCode, t.TYPE_NAME, + t.ledgerName, t.OFF_DAYS, t.LOGTIME, t.place, diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml index 7aff0f0..a63dac1 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml @@ -25,34 +25,55 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java index 3e0edd6..9dab3a7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java @@ -71,4 +71,18 @@ private Long deptid; + @ApiModelProperty("经度") + private String lngGaode; + + @ApiModelProperty("纬度") + private String latGaode; + + @ApiModelProperty("监测类型") + private String watchObject; + + @ApiModelProperty("点位id") + private Long ledgerId; + + + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java index e938da8..60464c4 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java @@ -12,6 +12,7 @@ private String deviceType; private String tagNumber; private String ledgerCode; + private String ledgerName; private String place; //台账类型 private String type; 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 ac4cabe..e623df7 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 @@ -44,6 +44,7 @@ import static cn.hutool.core.date.DateUnit.DAY; import static com.casic.missiles.util.TimeConvertUtil.TimeConverter; +import static com.casic.missiles.util.TimeConvertUtil.TimeConverterSecond; /** *

@@ -180,8 +181,8 @@ public DeviceAlarmDetailDTO deviceAlarmDetail(Long id) { DeviceAlarmDetailDTO alarmDetail = this.baseMapper.deviceAlarmDetail(id); - alarmDetail.setCancelDuration(TimeConverter(alarmDetail.getCancelDuration())); - alarmDetail.setProcessDuration(TimeConverter(alarmDetail.getProcessDuration())); + alarmDetail.setCancelDuration(TimeConverterSecond(alarmDetail.getCancelDuration())); + alarmDetail.setProcessDuration(TimeConverterSecond(alarmDetail.getProcessDuration())); alarmDetail.setDeptName(ObjectUtil.isNotEmpty(alarmDetail.getDeptid()) ? commonServer.getDeptNamesByDeptId(alarmDetail.getDeptid()) : ""); // alarmDetail.setAddress(alarmDetail.getTagNumber().concat("|").concat(alarmDetail.getLedgerName())); alarmDetail.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmDetail.getAlarmCategory())); @@ -524,16 +525,26 @@ @Override public void cancelDeviceAlarm(String devCode) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("DEVCODE", devCode); - updateWrapper.eq("EXCEPTION_TYPE", "1"); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE", devCode); + queryWrapper.eq("EXCEPTION_TYPE", "1"); //只有挂起和已处置的才消 // updateWrapper.ge("PROCESS_STATUS", "3"); - updateWrapper.eq("STATUS", "1"); - updateWrapper.set("STATUS", "0"); - updateWrapper.set("CANCEL_TIME", new Date()); - this.update(updateWrapper); - //toDo:需要加流程取消日志 + queryWrapper.eq("STATUS", "1"); + List alarmRecordsList = this.list(queryWrapper); + if (alarmRecordsList != null && alarmRecordsList.size() > 0) { + alarmRecordsList.forEach(alarmRecords -> { + alarmRecords.setStatus("0"); + alarmRecords.setCancelTime(new Date()); + alarmRecords.setPreProcessStatus(alarmRecords.getProcessStatus()); + alarmRecords.setProcessStatus(ApprovalStatusEnum.FINISHED.getCode()); + this.updateById(alarmRecords); + }); + //添加流程日志 + approvalLogMapper.insert(new ApprovalLog(alarmRecordsList.get(0).getId(), "1", + "", ApprovalStatusEnum.FINISHED.getCode(), + null)); + } } @Override @@ -674,8 +685,12 @@ AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), data.concat("%LEL"), data, - alarmRuleResponseDTO.getAlarmLevelId(),DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmLevelId(), DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmRuleResponseDTO.getAlarmTypeName(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -721,7 +736,7 @@ @Override - public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime,List busWellDTOList, + public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime, List busWellDTOList, Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { @@ -730,8 +745,12 @@ try { AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, - alarmLevelId, DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmLevelId, DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmTypeName, + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace() + , "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -793,7 +812,11 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.get().getAlarmTypeId(), alarmRuleResponseDTO.get().getAlarmTypeName(), alarmRuleResponseDTO.get().getAlarmLevelId(), DateUtil.parse(logTime), - alarmRuleResponseDTO.get().getAlarmThreshold(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "1"); + alarmRuleResponseDTO.get().getAlarmThreshold(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "1"); this.save(alarmRecords); } catch (Exception e) { e.printStackTrace(); @@ -846,8 +869,8 @@ * @param cell */ @Override - public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent,String logTime) { - this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent,DateUtil.parse(logTime)); + public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent, String logTime) { + this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent, DateUtil.parse(logTime)); } @Override @@ -903,7 +926,10 @@ offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), - offDeviceDTO.getPlace(), "1"); + ObjectUtil.isNotEmpty(offDeviceDTO.getLedgerName()) ? + offDeviceDTO.getTagNumber().concat("|"). + concat(offDeviceDTO.getLedgerName()) : + offDeviceDTO.getPlace(), "1"); alarmRecordsList.add(alarmRecords); ledgers.add(offDeviceDTO); } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java new file mode 100644 index 0000000..cb554b9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.data.dto; + + +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class PanDataDTO implements Serializable { + + private static final long serialVersionUID = 1232822221212L; + + private String dataTime; + + private String attributeType; + + private String dataValue; + + private String deviceCode; + + + +} 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 index a082d00..2a943ad 100644 --- 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 @@ -23,6 +23,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -37,6 +38,7 @@ * @author zt * @since 2025-01-22 */ +@Slf4j @RequiredArgsConstructor @Service public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { @@ -71,8 +73,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -80,8 +81,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}",devCode, e); } } @@ -141,8 +141,7 @@ } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -222,8 +221,10 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); +// e.printStackTrace(); +// log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); + } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java index dd80611..cd24860 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java @@ -83,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -124,8 +123,7 @@ busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -200,8 +198,7 @@ alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } //低电量报警处理 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 302b446..f0def39 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 @@ -76,8 +76,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -85,8 +84,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -133,8 +131,7 @@ if (i < jsonArray.size() - 1) continue; busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -217,8 +214,7 @@ } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } 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 e5ba8f7..a02af88 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataMonitorPipeOtherServiceImpl extends ServiceImpl implements IDataMonitorPipeOtherService, IDataAbstractService { @@ -73,8 +75,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -116,8 +116,7 @@ //2.写入新的报警 alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + log.error("处理报警时发生异常,devcode:{},e:{}", devCode, e); } } } @@ -160,8 +159,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmEventCode)); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -341,8 +339,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag || ObjectUtil.isNotEmpty(alarmContent) ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java index 5dc8c2b..f383690 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java @@ -2,7 +2,6 @@ import cn.hutool.core.date.DateUtil; 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; @@ -13,15 +12,20 @@ import com.casic.missiles.modular.alarm.service.IAlarmRuleService; import com.casic.missiles.modular.data.dao.DataGasMapper; import com.casic.missiles.modular.data.dao.DataPanGasMapper; +import com.casic.missiles.modular.data.dto.PanDataDTO; import com.casic.missiles.modular.data.entity.DataPanGas; import com.casic.missiles.modular.data.service.IDataPanGasService; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.CommonUtil; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonToken; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.io.IOException; import java.util.Date; import java.util.List; import java.util.Map; @@ -68,78 +72,179 @@ } - @Transactional @Override public boolean processAcceptGasData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); - JSONArray jsonArray = jsonObject.getJSONArray("data"); - String devCode = ""; - for (int i = 0; i < jsonArray.size(); i++) { - try { - devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); - if (ObjectUtil.isEmpty(devCode)) continue; - List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); - String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); - String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); - //暂只存浓度 - if ("2".equals(attributeType)) continue; - String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); - gas = String.format("%.2f", Double.valueOf(gas)); - //1.存数据 - save(DataPanGas.builder() - .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") - .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") - .deviceCode(devCode) - .concentration(gas) - .logtime(DateUtil.parseDateTime(dataTime)) - .build());//存储采集数据 - //2.有无超限处理流程(判断最后一条数据) -// if (i < jsonArray.size() - 1) continue; - - //3.清除设备告警 - alarmRecordsService.cancelDeviceAlarm(devCode); - //4.存报警 - //若没绑场站,则不产生报警 - boolean alarmFlag = false; - String bfcf = busDeviceService.getBfcf(devCode); - 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))) { - dataTime = dataTime.replaceAll("-", ""); - dataTime = dataTime.replaceAll(":", ""); - dataTime = dataTime.replaceAll("\\s+", ""); - alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); - } - break; - } - } - } - //5.清数据报警 - if (!alarmFlag) { - alarmRecordsService.cancelDataAlarm(devCode); - } - //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); - //7.更新监测井状态 (1:正常,2:报警) - if (busWellDTOList != null && busWellDTOList.size() > 0) { - alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); - } - } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + JsonFactory factory = new JsonFactory(); + try (JsonParser parser = factory.createParser(jsonObject.getString("data"))) { + // 定位到 "data" 数组 + while (parser.nextToken() != JsonToken.START_ARRAY) { + parser.nextToken(); } + // 逐条处理数据 + while (parser.nextToken() != JsonToken.END_ARRAY) { + if (parser.getCurrentToken() == JsonToken.START_OBJECT) { + processSingleData(parseJsonObject(parser)); + } + + } + } catch (IOException e) { + e.printStackTrace(); } + return true; } + private PanDataDTO parseJsonObject(JsonParser parser) throws IOException { + PanDataDTO panDataDTO = new PanDataDTO(); + while (parser.nextToken() != JsonToken.END_OBJECT) { + String fieldName = parser.getCurrentName(); + if ("dataTime".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataTime(parser.getText()); + } else if ("attributeType".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setAttributeType(parser.getText()); + } else if ("dataValue".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataValue(parser.getText()); + } else if ("deviceCode".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDeviceCode(parser.getText()); + } + } + return panDataDTO; + } + + + private void processSingleData(PanDataDTO panDataDTO) { + try { + String devCode = panDataDTO.getDeviceCode(); + if (ObjectUtil.isEmpty(devCode)) return; + List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); + String gas = panDataDTO.getDataValue(); + String attributeType = panDataDTO.getAttributeType(); + //暂只存浓度 + if ("2".equals(attributeType)) return; + String dataTime = panDataDTO.getDataTime(); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataPanGas.builder() + .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .deviceCode(devCode) + .concentration(gas) + .logtime(DateUtil.parseDateTime(dataTime)) + .build());//存储采集数据 + + boolean alarmFlag = false; + String bfcf = busDeviceService.getBfcf(devCode); + 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))) { +// dataTime = dataTime.replaceAll("-", ""); +// dataTime = dataTime.replaceAll(":", ""); +// dataTime = dataTime.replaceAll("\\s+", ""); + alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); + //7.更新监测井状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + log.error("处理云台数据时发生异常,devcode:{},data:{},e:{}", panDataDTO.getDeviceCode(), panDataDTO.toString(), e); + } + } + + +// @Transactional +// @Override +// public boolean processAcceptGasData(Map dataParams) { +// JSONObject jsonObject = new JSONObject(dataParams); +// JSONArray jsonArray = jsonObject.getJSONArray("data"); +// String devCode = ""; +// for (int i = 0; i < jsonArray.size(); i++) { +// try { +// devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); +// if (ObjectUtil.isEmpty(devCode)) continue; +// List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); +// String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); +// String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); +// //暂只存浓度 +// if ("2".equals(attributeType)) continue; +// String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); +// gas = String.format("%.2f", Double.valueOf(gas)); +// //1.存数据 +// save(DataPanGas.builder() +// .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") +// .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") +// .deviceCode(devCode) +// .concentration(gas) +// .logtime(DateUtil.parseDateTime(dataTime)) +// .build());//存储采集数据 +// //2.有无超限处理流程(判断最后一条数据) +//// if (i < jsonArray.size() - 1) continue; +// +// //3.清除设备告警 +//// alarmRecordsService.cancelDeviceAlarm(devCode); +// //4.存报警 +// //若没绑场站,则不产生报警 +// boolean alarmFlag = false; +// String bfcf = busDeviceService.getBfcf(devCode); +// 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))) { +//// dataTime = dataTime.replaceAll("-", ""); +//// dataTime = dataTime.replaceAll(":", ""); +//// dataTime = dataTime.replaceAll("\\s+", ""); +// alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); +// } +// break; +// } +// } +// } +// //5.清数据报警 +// if (!alarmFlag) { +// alarmRecordsService.cancelDataAlarm(devCode); +// } +// //6.更新电量及状态 (1:正常,2:报警) +// alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); +// //7.更新监测井状态 (1:正常,2:报警) +// if (busWellDTOList != null && busWellDTOList.size() > 0) { +// alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); +// } +// } catch (Exception e) { +// log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); +// } +// } +// return true; +// } + @Override public boolean acceptAlarmData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); 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 37d731d..a17953b 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataTubeOtherServiceImpl extends ServiceImpl implements IDataTubeOtherService, IDataAbstractService { @@ -73,7 +75,7 @@ } } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,7 +84,7 @@ imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -122,8 +124,8 @@ } //特殊处理消警 if ("CancelWaterImmersionAlarm".equals(alarmType)) { - if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { - alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + if (alarmRecordsService.isWatchAlarms(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelWatchAlarms(devCode, "WaterImmersionAlarm"); } continue; } @@ -146,8 +148,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmType)); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -227,8 +228,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java new file mode 100644 index 0000000..3be65dd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java @@ -0,0 +1,170 @@ +package com.casic.missiles.modular.aop; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.aop.annotion.ReflectionUtils; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.modular.interfaces.log.LogManager; +import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.Serializable; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Aspect +@Component +public class OperateLogAspect { + private Logger log = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private ApplicationContext applicationContext; + + public static volatile Map oldMap = new HashMap<>(); + + public OperateLogAspect() { + } + + @Pointcut("@annotation(com.casic.missiles.modular.aop.annotion.OperateLog)") + public void cutService() { + } + + @Around("cutService()") + public Object recordSysLog(ProceedingJoinPoint point) throws Throwable { + Object result = point.proceed(); + + try { + this.handle(point); + } catch (Exception var4) { + this.log.error("日志记录出错!", var4); + } + + return result; + } + + /** + * 处理请求前执行 + */ + @Before(value = "@annotation(operateLog)") + public void boBefore(JoinPoint joinPoint, OperateLog operateLog) { + Object info = joinPoint.getArgs()[0]; + if ("edit".equals(operateLog.type()) && operateLog.needDefaultCompare()) { + Class cls = operateLog.serviceClass(); + IService service = (IService) applicationContext.getBean(cls); + Object result; + if (service instanceof IBusDeviceService) { + result = ((IBusDeviceService) service).getByDeviceId((Long) ReflectionUtils.getFieldValue(info, "id")); + } else + result = service.getById((Serializable) ReflectionUtils.getFieldValue(info, "id")); + oldMap = (Map) objectToMap(result); // 存储修改前的对象 + } + } + + private void handle(ProceedingJoinPoint point) throws Exception { + Signature sig = point.getSignature(); + MethodSignature msig = null; + if (!(sig instanceof MethodSignature)) { + throw new IllegalArgumentException("该注解只能用于方法"); + } else { + msig = (MethodSignature) sig; + Object target = point.getTarget(); + Method currentMethod = target.getClass().getMethod(msig.getName(), msig.getParameterTypes()); + String methodName = currentMethod.getName(); + AuthUser user = ShiroKit.getUser(); + if (null != user) { + String className = point.getTarget().getClass().getName(); + Object[] params = point.getArgs(); + OperateLog annotation = (OperateLog) currentMethod.getAnnotation(OperateLog.class); + String bussinessName = annotation.value(); + String key = annotation.key(); + Class dictClass = annotation.dict(); + String sb = argsArrayToString(params); + String msg = sb; + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + if ("add".equals(annotation.type())) { + Map parameters = (Map) objectToMap(params[0]); + msg = CollectionUtils.isEmpty(parameters) ? sb : ReflectionUtils.parseMutiKey(dictMap, key, parameters); + } else if ("edit".equals(annotation.type())) { + msg = CollectionUtils.isEmpty(oldMap) ? sb : ReflectionUtils.contrastObj(dictClass, key, params[0], oldMap); + }else if("delete".equals(annotation.type())){ + msg=dictMap.get(annotation.key())+":"+ReflectionUtils.getDeleteKeys(params[0]); + } + LogManager.me().executeLog(LogTaskFactory.bussinessLog(user.getId(), bussinessName, className, methodName, msg)); + } + } + } + + + /** + * 参数拼装 + */ + private String argsArrayToString(Object[] paramsArray) { + Gson gson = new GsonBuilder().create(); + String params = ""; + if (paramsArray != null && paramsArray.length > 0) { + for (int i = 0; i < paramsArray.length; i++) { + if (!isFilterObject(paramsArray[i])) { + params += gson.toJson(paramsArray[i]) + " & "; + } + } + } + return params.trim(); + } + + + /** + * 判断是否需要过滤的对象。 + * + * @param o 对象信息。 + * @return 如果是需要过滤的对象,则返回true;否则返回false。 + */ + public boolean isFilterObject(final Object o) { + return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse; + } + + private Map objectToMap(Object obj) { + if (obj == null) { + return null; + } + ObjectMapper mapper = new ObjectMapper(); + mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + // 如果使用JPA请自己打开这条配置 + // mapper.addMixIn(Object.class, IgnoreHibernatePropertiesInJackson.class); + Map mappedObject = mapper.convertValue(obj, Map.class); + return mappedObject; + + + } +} + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java new file mode 100644 index 0000000..77afa9c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.aop.annotion; + +import java.lang.annotation.*; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.FIELD}) +@Documented +public @interface DataName { + String name() default ""; // 字段名称 + + /** + * 读取枚举内容转义表达式 (如: 0=男,1=女,2=未知) + */ + String readConverterExp() default ""; +} + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java new file mode 100644 index 0000000..f1f59ad --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.aop.annotion; + + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.common.constant.dictmap.base.SystemDict; + +import java.lang.annotation.*; + +@Inherited +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.METHOD}) +public @interface OperateLog { + String value() default ""; + + String key() default "id"; + + Class serviceClass() default IService.class; + + // 是否需要比较新旧数据 + boolean needDefaultCompare() default true; + + //操作类型 add update delete + String type() default "update"; + + Class dict() default SystemDict.class; +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java new file mode 100644 index 0000000..eb773ad --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java @@ -0,0 +1,328 @@ +package com.casic.missiles.modular.aop.annotion; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.modular.interfaces.dictmap.factory.DictFieldWrapperFactory; +import lombok.extern.slf4j.Slf4j; + +import java.beans.PropertyDescriptor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.*; + +import static com.casic.missiles.modular.interfaces.utils.Contrast.firstCharToLowerCase; +import static com.casic.missiles.modular.interfaces.utils.Contrast.firstCharToUpperCase; + +@Slf4j +public class ReflectionUtils { + + /** + * 直接读取对象属性值, 无视private/protected修饰符, 不经过getter函数. + * + * @param obj 读取的对象 + * @param fieldName 读取的列 + * @return 属性值 + */ + public static Object getFieldValue(final Object obj, final String fieldName) { + Field field = getAccessibleField(obj, fieldName); + if (field == null) { + throw new IllegalArgumentException("Could not find field [" + fieldName + "] on target [" + obj + "]"); + } + + Object result = null; + try { + result = field.get(obj); + } catch (IllegalAccessException e) { + log.error("不可能抛出的异常{}", e.getMessage()); + e.printStackTrace(); + } + return result; + } + + /** + * 循环向上转型, 获取对象的DeclaredField, 并强制设置为可访问.如向上转型到Object仍无法找到, 返回null. + * + * @param obj 查找的对象 + * @param fieldName 列名 + * @return 列 + */ + public static Field getAccessibleField(final Object obj, final String fieldName) { + for (Class superClass = obj.getClass(); superClass != Object.class; superClass = superClass.getSuperclass()) { + try { + Field field = superClass.getDeclaredField(fieldName); + makeAccessible(field); + return field; + } catch (NoSuchFieldException e) { // NOSONAR + // Field不在当前类定义,继续向上转型 + e.printStackTrace(); + continue; // new add + } + } + return null; + } + + /** + * 改变private/protected的成员变量为public,尽量不调用实际改动的语句,避免JDK的SecurityManager抱怨。 + * + * @param + */ + public static void makeAccessible(Field field) { + if ((!Modifier.isPublic(field.getModifiers()) || !Modifier.isPublic(field.getDeclaringClass().getModifiers()) || Modifier + .isFinal(field.getModifiers())) && !field.isAccessible()) { + field.setAccessible(true); + } + } + + /** + * 获取两个对象同名属性内容不相同的列表 + * + * @param class1 old对象 + * @param class2 new对象 + * @return 区别列表 + * @throws ClassNotFoundException 异常 + * @throws IllegalAccessException 异常 + */ + public static List> compareTwoClass(Object class1, Object class2) throws ClassNotFoundException, IllegalAccessException { + List> list = new ArrayList>(); + // 获取对象的class + Class clazz1 = class1.getClass(); + Class clazz2 = class2.getClass(); + // 获取对象的属性列表 + Field[] field1 = clazz1.getDeclaredFields(); + Field[] field2 = clazz2.getDeclaredFields(); + StringBuilder sb = new StringBuilder(); + // 遍历属性列表field1 + for (int i = 0; i < field1.length; i++) { + // 遍历属性列表field2 + for (int j = 0; j < field2.length; j++) { + // 如果field1[i]属性名与field2[j]属性名内容相同 + if (field1[i].getName().equals(field2[j].getName())) { + if (field1[i].getName().equals(field2[j].getName())) { + field1[i].setAccessible(true); + field2[j].setAccessible(true); + // 如果field1[i]属性值与field2[j]属性值内容不相同 + if (!compareTwo(field1[i].get(class1), field2[j].get(class2))) { + Map map2 = new HashMap(); + DataName name = field1[i].getAnnotation(DataName.class); + String fieldName = ""; + if (name != null) { + fieldName = name.name(); + } else { + fieldName = field1[i].getName(); + } + map2.put("name", fieldName); + map2.put("old", field1[i].get(class1)); + map2.put("new", field2[j].get(class2)); + list.add(map2); + } + break; + } + } + } + } + return list; + } + + /** + * 对比两个数据是否内容相同 + * + * @param object1 比较对象1 + * @param object2 比较对象2 + * @return boolean类型 + */ + public static boolean compareTwo(Object object1, Object object2) { + if (object1 == null && object2 == null) { + return true; + } + if (object1 == null && object2 != null) { + return false; + } + if (object1.equals(object2)) { + return true; + } + return false; + } + + public static String contrastObjByName(Class dictClass, String key, Object pojo1, Map pojo2) throws IllegalAccessException, InstantiationException { + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + String str = parseMutiKey(dictMap, key, pojo2) + ";;;"; + + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if (!"serialVersionUID".equals(field.getName())) { + String prefix = "get"; + int prefixLength = 3; + if (field.getType().getName().equals("java.lang.Boolean")) { + prefix = "is"; + prefixLength = 2; + } + + Method getMethod = null; + + try { + getMethod = clazz.getDeclaredMethod(prefix + firstCharToUpperCase(field.getName())); + } catch (NoSuchMethodException var22) { + System.err.println("this className:" + clazz.getName() + " is not methodName: " + var22.getMessage()); + continue; + } + + Object o1 = getMethod.invoke(pojo1); + Object o2 = pojo2.get(firstCharToLowerCase(getMethod.getName().substring(prefixLength))); + if (o1 != null && o2 != null) { + if (o1 instanceof Date) { + o1 = DateUtil.format(new Date(), "yyyy-MM-dd"); + } else if (o1 instanceof Integer) { + o2 = Integer.parseInt(o2.toString()); + } + + if (!o1.toString().equals(o2.toString())) { + if (i != 1) { + str = str + ";;;"; + } + + String fieldName = dictMap.get(field.getName()); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(field.getName()); + if (fieldWarpperMethodName != null) { + Object o1Warpper = DictFieldWrapperFactory.createFieldWrapper(o1, fieldWarpperMethodName); + Object o2Warpper = DictFieldWrapperFactory.createFieldWrapper(o2, fieldWarpperMethodName); + str = str + "字段名称:" + fieldName + ",旧值:" + o1Warpper + ",新值:" + o2Warpper; + } else { + str = str + "字段名称:" + fieldName + ",旧值:" + o1 + ",新值:" + o2; + } + + ++i; + } + } + } + } + } catch (Exception var23) { + var23.printStackTrace(); + } + + return str; + } + + public static String parseMutiKey(AbstractDictMap dictMap, String key, Map requests) { + StringBuilder sb = new StringBuilder(); + if (key.indexOf(",") != -1) { + String[] keys = key.split(","); + String[] var13 = keys; + int var14 = keys.length; + + for (int var7 = 0; var7 < var14; ++var7) { + String item = var13[var7].trim(); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(item); + Object value = requests.get(item); + if (fieldWarpperMethodName != null) { + Object valueWarpper = DictFieldWrapperFactory.createFieldWrapper(value, fieldWarpperMethodName); + sb.append(dictMap.get(item) + "=" + valueWarpper + ","); + } else { + sb.append(dictMap.get(item) + "=" + (ObjectUtil.isNotEmpty(value) ? value.toString() : "") + ","); + } + } + + return StrUtil.removeSuffix(sb.toString(), ","); + } else { + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(key); + Object value = requests.get(key); + if (fieldWarpperMethodName != null) { + Object valueWarpper = DictFieldWrapperFactory.createFieldWrapper(value, fieldWarpperMethodName); + sb.append(dictMap.get(key) + "=" + valueWarpper); + } else { + sb.append(dictMap.get(key) + "=" + (ObjectUtil.isNotEmpty(value) ? value.toString() : "")); + } + + return sb.toString(); + } + } + + public static String getDeleteKeys(Object pojo1) { + String str = ""; + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if ("keys".equals(field.getName())) { + PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); + Method getMethod = pd.getReadMethod(); + Object o1 = getMethod.invoke(pojo1); + return ObjectUtil.isNotEmpty(o1) ? o1.toString().replaceAll("\\[|]", "") : "".concat(",已删除"); + } + } + + } catch (Exception var21) { + var21.printStackTrace(); + } + return str; + } + + public static String contrastObj(Class dictClass, String key, Object pojo1, Map pojo2) throws IllegalAccessException, InstantiationException { + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); +// String str = parseMutiKey(dictMap, key, pojo2) + ";;;"; + String str = ""; + + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if (!"serialVersionUID".equals(field.getName())) { + PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); + Method getMethod = pd.getReadMethod(); + Object o1 = getMethod.invoke(pojo1); + Object o2 = pojo2.get(firstCharToLowerCase(getMethod.getName().substring(3))); + if (o1 != null && o2 != null) { + if (o1 instanceof Integer) { + o2 = Integer.parseInt(o2.toString()); + } else if (o1 instanceof Date) { + o1 = DateUtil.format((Date) o1, "yyyy-MM-dd HH:mm:ss"); + } + + if (!o1.toString().equals(o2.toString())) { + if (i != 1) { + str = str + ";"; + } + + String fieldName = dictMap.get(field.getName()); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(field.getName()); + if (fieldWarpperMethodName != null) { + Object o1Warpper = DictFieldWrapperFactory.createFieldWrapper(o1, fieldWarpperMethodName); + Object o2Warpper = DictFieldWrapperFactory.createFieldWrapper(o2, fieldWarpperMethodName); + str = str + fieldName + ":将【" + o1Warpper + "】,改为【" + o2Warpper + "】"; + } else { + str = str + fieldName + ":将【" + o1 + "】,改为【" + o2 + "】"; + } + + ++i; + } + } + } + } + } catch (Exception var21) { + var21.printStackTrace(); + } + + return str; + } + + +} \ No newline at end of file diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java index 7497ebf..18fd820 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java @@ -8,12 +8,14 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.StateDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.DeviceTypeDict; import com.casic.missiles.modular.device.dto.BaseDeviceTypeDTO; import com.casic.missiles.modular.device.dto.BaseDeviceTypeIdsDTO; import com.casic.missiles.modular.device.dto.SelectDTO; @@ -63,6 +65,7 @@ return ReturnUtil.success(super.packForBT(baseDeviceTypePage)); } + @OperateLog(value = "新增设备类型", key = "typeName,watchObject,isUsed,typeDescription", dict = DeviceTypeDict.class, type = "add") @ApiOperation("增加设备类型") @PostMapping("/add") @ResponseBody @@ -71,6 +74,7 @@ return ReturnUtil.success(iBaseDeviceTypeService.saveBaseDeviceType(baseDeviceType)); } + @OperateLog(value = "编辑设备类型", dict = DeviceTypeDict.class, serviceClass = IBaseDeviceTypeService.class, type = "edit") @ApiOperation("编辑设备类型") @PostMapping("/edit") @ResponseBody @@ -81,10 +85,11 @@ return ReturnUtil.success(iBaseDeviceTypeService.updateById(baseDeviceType)); } + @OperateLog(value = "删除设备类型", key = "typeName", dict = DeviceTypeDict.class, serviceClass = IBaseDeviceTypeService.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); @@ -113,7 +118,7 @@ public ReturnDTO selectList(@RequestBody BaseDeviceTypeIdsDTO request) { QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.in(request.getDeviceTypeList()!=null&&request.getDeviceTypeList().size()>0, "id", request.getDeviceTypeList()); + queryWrapper.in(request.getDeviceTypeList() != null && request.getDeviceTypeList().size() > 0, "id", request.getDeviceTypeList()); queryWrapper.eq("IS_USED", "1"); List baseDeviceTypes = iBaseDeviceTypeService.list(queryWrapper); List selectDTOS = new ArrayList<>(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java index 42d752d..54944e2 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java @@ -3,14 +3,15 @@ import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.IdDTO; -import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.ProductDict; import com.casic.missiles.modular.device.dto.BaseProductDTO; import com.casic.missiles.modular.device.dto.SelectProductDTO; import com.casic.missiles.modular.device.entity.BaseProduct; @@ -21,7 +22,6 @@ import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; -import java.util.List; import java.util.Objects; /** @@ -49,6 +49,7 @@ return ReturnUtil.success(super.packForBT(iBaseProductService.pageList(page, requestDTO))); } + @OperateLog(value = "新增产品", key = "productName,deviceType,deviceModel,manufacturerId,protocol,accessMethod,powerSupplyMode,dataService", dict = ProductDict.class, type = "add") @ApiOperation("新增") @PostMapping("/add") @ResponseBody @@ -58,6 +59,7 @@ } + @OperateLog(value = "编辑产品", dict = ProductDict.class, serviceClass = IBaseProductService.class, type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -68,10 +70,11 @@ return ReturnUtil.success(iBaseProductService.updateBaseProductById(baseProduct)); } + @OperateLog(value = "删除产品", key = "productName", dict = ProductDict.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 509bd7b..103acf2 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 @@ -9,6 +9,7 @@ import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; @@ -17,6 +18,7 @@ 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.aop.annotion.OperateLog; import com.casic.missiles.modular.device.dict.BusConfigDict; import com.casic.missiles.modular.device.dict.DeviceDict; import com.casic.missiles.modular.device.dto.*; @@ -65,7 +67,8 @@ } - @BussinessLog(value = "新增设备", key = "devcode,deviceName,deviceType,installDate,productId", dict = DeviceDict.class) + @OperateLog(value = "新增设备", key = "devcode,deviceType,productId," + + "valid,communicationType,simId,warrantyPeriod,tagNumber,leftLength,rightLength,", dict = DeviceDict.class,type = "add") @CacheEvict(value="busLedgersCache", key="#busDevice.getDevcode()") @ApiOperation("新增") @PostMapping("/add") @@ -75,7 +78,8 @@ } - @BussinessLog(value = "编辑设备", key = "devcode,deviceName,deviceType,installDate,productId", dict = DeviceDict.class) + @OperateLog(value = "编辑设备", key = "devcode,deviceType,installDate,productId," + + "leftLength,rightLength,communicationType,simId,warrantyPeriod", dict = DeviceDict.class,serviceClass = IBusDeviceService.class,type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -86,11 +90,12 @@ return ReturnUtil.success(iBusDeviceService.updateBusDevice(busDevice)); } + @OperateLog(value = "删除设备", key = "devcode", dict = DeviceDict.class,serviceClass = IBusDeviceService.class,type = "delete") @CacheEvict(value="busLedgersCache", allEntries = true) @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 31de56e..6f35acd 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 @@ -4,8 +4,8 @@ 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.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.page.PageFactory; @@ -16,11 +16,8 @@ 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.BusDeviceDTO; -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.BusDevice; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.CommonUtil; @@ -53,6 +50,7 @@ private final IBusLedgerPipeService iBusLedgerPipeService; private final IBaseExportService iBaseExportService; + private final AbstractDictService abstractDictService; @ApiOperation("新建点位") @PostMapping("/addPosition") @@ -60,10 +58,10 @@ 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,"安装位号已存!!!"); + if (busLedgerPipeList != null && busLedgerPipeList.size() > 0) { + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE, "安装位号已存!!!"); } - Long id =IdUtil.getSnowflake(1,2).nextId(); + Long id = IdUtil.getSnowflake(1, 2).nextId(); busLedgerPipe.setId(id); busLedgerPipe.setLedgerCode(busLedgerPipe.getTagNumber()); busLedgerPipe.setArea(CommonUtil.getAreaCode(busLedgerPipe.getPosition())); @@ -139,7 +137,11 @@ page.setCurrent(1); page.setSize(Integer.MAX_VALUE); Page devicePage = iBusLedgerPipeService.listPage(page, busLedgerPipeRequestDTO); + List records = devicePage.getRecords(); try { + for (BusLedgerPipe busLedgerPipe : records) { + busLedgerPipe.setLocationCategory(abstractDictService.getDictNameByCode("locationType", busLedgerPipe.getLocationCategory())); + } iBaseExportService.exportExcel(response, BusLedgerPipe.class, devicePage.getRecords(), ExportEnum.LEDGER_PIPE_EXPORT.getSheetName()); } catch (Exception e) { e.printStackTrace(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java index e87f3f8..8040c74 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java @@ -7,10 +7,13 @@ 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.DeletesDTO; import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.ProtocolDict; import com.casic.missiles.modular.device.dto.BusProtocolDTO; import com.casic.missiles.modular.device.entity.BusProtocol; import com.casic.missiles.modular.device.service.IBusProtocolService; @@ -35,10 +38,10 @@ @RestController @RequestMapping("/system/busProtocol") public class BusProtocolController extends ExportController { - + private final IBusProtocolService protocolService; - + @ApiOperation("查询分页接口") @PostMapping("/listPage") @ResponseBody @@ -47,9 +50,10 @@ queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getProtocolName()), "PROTOCOL_NAME", requestDTO.getProtocolName()); queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getProtocolCode()), "PROTOCOL_CODE", requestDTO.getProtocolCode()); Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(protocolService.page(page,queryWrapper))); + return ReturnUtil.success(super.packForBT(protocolService.page(page, queryWrapper))); } + @OperateLog(value = "新增协议", key = "protocolName,protocolCode,version,ip,description", dict = ProtocolDict.class, type = "add") @ApiOperation("新增") @PostMapping("/add") @ResponseBody @@ -58,6 +62,7 @@ return ReturnUtil.success(protocolService.save(busProtocol)); } + @OperateLog(value = "编辑协议", dict = ProtocolDict.class, serviceClass = IBusProtocolService.class, type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -68,10 +73,11 @@ return ReturnUtil.success(protocolService.updateById(busProtocol)); } + @OperateLog(value = "删除协议", key = "protocolName", dict = ProtocolDict.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 23ddee9..24c4712 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 @@ -2,7 +2,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.entity.BusDevice; import com.casic.missiles.util.InConditionDriver; @@ -46,27 +45,27 @@ @Param("orderColumn") String orderColumn, @Param("request") CommonRequestDTO request); - @Select("SELECT BFZT from bus_device where VALID=1 and DEVCODE= #{devcode} limit 1" ) - String getBfcf( @Param("devcode") String devcode); + @Select("SELECT BFZT from bus_device where VALID=1 and DEVCODE= #{devcode} limit 1") + String getBfcf(@Param("devcode") String devcode); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getMethaneData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getMethaneData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_tube_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getTubeOtherData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_tube_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getTubeOtherData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gasliquid_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getLGData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gasliquid_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getLGData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_monitor_pipe_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getMonitorPipeOtherData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_monitor_pipe_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getMonitorPipeOtherData(@Param("devcodes") List devcodes); - @Select("SELECT ALARM_THRESHOLD FROM `alarm_rule_device` where DEVCODE = #{devcode} order by ALARM_THRESHOLD asc " ) + @Select("SELECT ALARM_THRESHOLD FROM `alarm_rule_device` where DEVCODE = #{devcode} order by ALARM_THRESHOLD asc ") List getSpecialDeviceRule(@Param("devcode") String devcode); @Select(" select ar.ALARM_THRESHOLD from alarm_rule ar where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + @@ -81,4 +80,7 @@ "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") List getListByWellId(@Param("wellId") Long wellId); + + BusDeviceOperateLogDTO getByDeviceId(@Param("id") Long id); + } 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 8ba4b15..3109344 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 @@ -44,7 +44,7 @@ LEFT JOIN base_product bp ON bd.PRODUCT_ID = bp.ID LEFT JOIN bus_device_ledger br on br.DEVICE_ID = bd.ID AND br.VALID='1' LEFT JOIN bus_manufacturer bm on bm.ID = bp.MANUFACTURER_ID - LEFT JOIN bus_ledger_all_view bl on bl.ID = br.LEDGER_ID AND br.VALID='1' and bl.type = br.type + LEFT JOIN bus_ledger_all_view bl on bl.ID = br.LEDGER_ID AND bl.VALID='1' and bl.type = br.type where bd.valid>0 @@ -95,6 +95,32 @@ + + + SELECT - rd.*, - at.alarm_type, - bt.TYPE_NAME as devTypeName - FROM - alarm_records rd - LEFT JOIN bus_ledger_all_view lr ON lr.ledgerCode = rd.LEDGER_CODE - LEFT JOIN alarm_type at ON at.ID = rd.ALARM_TYPE_ID - LEFT JOIN bus_device bd ON bd.DEVCODE = rd.DEVCODE and bd.valid >0 - LEFT JOIN base_device_type bt ON bt.id = bd.DEVICE_TYPE + rd.*, + AT.alarm_type, + bt.TYPE_NAME AS devTypeName + FROM + alarm_records rd + LEFT JOIN bus_device bd ON bd.DEVCODE = rd.DEVCODE + AND bd.valid > 0 + LEFT JOIN bus_device_ledger bl ON bd.ID = bl.DEVICE_ID + AND bl.VALID = '1' + 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' + AND lr.ledgerCode = rd.LEDGER_CODE + LEFT JOIN alarm_type AT ON AT.ID = rd.ALARM_TYPE_ID + LEFT JOIN base_device_type bt ON bt.id = bd.DEVICE_TYPE where rd.STATUS ='1' and rd.EXCEPTION_TYPE='0' @@ -695,6 +705,7 @@ dt.LOGTIME, bv.tagNumber, bv.ledgerCode, + bv.ledgerName, bdt.TYPE_NAME, bv.place, bv.type, @@ -720,6 +731,7 @@ t.tagNumber, t.ledgerCode, t.TYPE_NAME, + t.ledgerName, t.OFF_DAYS, t.LOGTIME, t.place, diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml index 7aff0f0..a63dac1 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml @@ -25,34 +25,55 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java index 3e0edd6..9dab3a7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java @@ -71,4 +71,18 @@ private Long deptid; + @ApiModelProperty("经度") + private String lngGaode; + + @ApiModelProperty("纬度") + private String latGaode; + + @ApiModelProperty("监测类型") + private String watchObject; + + @ApiModelProperty("点位id") + private Long ledgerId; + + + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java index e938da8..60464c4 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java @@ -12,6 +12,7 @@ private String deviceType; private String tagNumber; private String ledgerCode; + private String ledgerName; private String place; //台账类型 private String type; 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 ac4cabe..e623df7 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 @@ -44,6 +44,7 @@ import static cn.hutool.core.date.DateUnit.DAY; import static com.casic.missiles.util.TimeConvertUtil.TimeConverter; +import static com.casic.missiles.util.TimeConvertUtil.TimeConverterSecond; /** *

@@ -180,8 +181,8 @@ public DeviceAlarmDetailDTO deviceAlarmDetail(Long id) { DeviceAlarmDetailDTO alarmDetail = this.baseMapper.deviceAlarmDetail(id); - alarmDetail.setCancelDuration(TimeConverter(alarmDetail.getCancelDuration())); - alarmDetail.setProcessDuration(TimeConverter(alarmDetail.getProcessDuration())); + alarmDetail.setCancelDuration(TimeConverterSecond(alarmDetail.getCancelDuration())); + alarmDetail.setProcessDuration(TimeConverterSecond(alarmDetail.getProcessDuration())); alarmDetail.setDeptName(ObjectUtil.isNotEmpty(alarmDetail.getDeptid()) ? commonServer.getDeptNamesByDeptId(alarmDetail.getDeptid()) : ""); // alarmDetail.setAddress(alarmDetail.getTagNumber().concat("|").concat(alarmDetail.getLedgerName())); alarmDetail.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmDetail.getAlarmCategory())); @@ -524,16 +525,26 @@ @Override public void cancelDeviceAlarm(String devCode) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("DEVCODE", devCode); - updateWrapper.eq("EXCEPTION_TYPE", "1"); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE", devCode); + queryWrapper.eq("EXCEPTION_TYPE", "1"); //只有挂起和已处置的才消 // updateWrapper.ge("PROCESS_STATUS", "3"); - updateWrapper.eq("STATUS", "1"); - updateWrapper.set("STATUS", "0"); - updateWrapper.set("CANCEL_TIME", new Date()); - this.update(updateWrapper); - //toDo:需要加流程取消日志 + queryWrapper.eq("STATUS", "1"); + List alarmRecordsList = this.list(queryWrapper); + if (alarmRecordsList != null && alarmRecordsList.size() > 0) { + alarmRecordsList.forEach(alarmRecords -> { + alarmRecords.setStatus("0"); + alarmRecords.setCancelTime(new Date()); + alarmRecords.setPreProcessStatus(alarmRecords.getProcessStatus()); + alarmRecords.setProcessStatus(ApprovalStatusEnum.FINISHED.getCode()); + this.updateById(alarmRecords); + }); + //添加流程日志 + approvalLogMapper.insert(new ApprovalLog(alarmRecordsList.get(0).getId(), "1", + "", ApprovalStatusEnum.FINISHED.getCode(), + null)); + } } @Override @@ -674,8 +685,12 @@ AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), data.concat("%LEL"), data, - alarmRuleResponseDTO.getAlarmLevelId(),DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmLevelId(), DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmRuleResponseDTO.getAlarmTypeName(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -721,7 +736,7 @@ @Override - public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime,List busWellDTOList, + public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime, List busWellDTOList, Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { @@ -730,8 +745,12 @@ try { AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, - alarmLevelId, DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmLevelId, DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmTypeName, + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace() + , "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -793,7 +812,11 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.get().getAlarmTypeId(), alarmRuleResponseDTO.get().getAlarmTypeName(), alarmRuleResponseDTO.get().getAlarmLevelId(), DateUtil.parse(logTime), - alarmRuleResponseDTO.get().getAlarmThreshold(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "1"); + alarmRuleResponseDTO.get().getAlarmThreshold(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "1"); this.save(alarmRecords); } catch (Exception e) { e.printStackTrace(); @@ -846,8 +869,8 @@ * @param cell */ @Override - public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent,String logTime) { - this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent,DateUtil.parse(logTime)); + public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent, String logTime) { + this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent, DateUtil.parse(logTime)); } @Override @@ -903,7 +926,10 @@ offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), - offDeviceDTO.getPlace(), "1"); + ObjectUtil.isNotEmpty(offDeviceDTO.getLedgerName()) ? + offDeviceDTO.getTagNumber().concat("|"). + concat(offDeviceDTO.getLedgerName()) : + offDeviceDTO.getPlace(), "1"); alarmRecordsList.add(alarmRecords); ledgers.add(offDeviceDTO); } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java new file mode 100644 index 0000000..cb554b9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.data.dto; + + +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class PanDataDTO implements Serializable { + + private static final long serialVersionUID = 1232822221212L; + + private String dataTime; + + private String attributeType; + + private String dataValue; + + private String deviceCode; + + + +} 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 index a082d00..2a943ad 100644 --- 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 @@ -23,6 +23,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -37,6 +38,7 @@ * @author zt * @since 2025-01-22 */ +@Slf4j @RequiredArgsConstructor @Service public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { @@ -71,8 +73,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -80,8 +81,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}",devCode, e); } } @@ -141,8 +141,7 @@ } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -222,8 +221,10 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); +// e.printStackTrace(); +// log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); + } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java index dd80611..cd24860 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java @@ -83,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -124,8 +123,7 @@ busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -200,8 +198,7 @@ alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } //低电量报警处理 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 302b446..f0def39 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 @@ -76,8 +76,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -85,8 +84,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -133,8 +131,7 @@ if (i < jsonArray.size() - 1) continue; busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -217,8 +214,7 @@ } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } 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 e5ba8f7..a02af88 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataMonitorPipeOtherServiceImpl extends ServiceImpl implements IDataMonitorPipeOtherService, IDataAbstractService { @@ -73,8 +75,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -116,8 +116,7 @@ //2.写入新的报警 alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + log.error("处理报警时发生异常,devcode:{},e:{}", devCode, e); } } } @@ -160,8 +159,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmEventCode)); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -341,8 +339,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag || ObjectUtil.isNotEmpty(alarmContent) ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java index 5dc8c2b..f383690 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java @@ -2,7 +2,6 @@ import cn.hutool.core.date.DateUtil; 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; @@ -13,15 +12,20 @@ import com.casic.missiles.modular.alarm.service.IAlarmRuleService; import com.casic.missiles.modular.data.dao.DataGasMapper; import com.casic.missiles.modular.data.dao.DataPanGasMapper; +import com.casic.missiles.modular.data.dto.PanDataDTO; import com.casic.missiles.modular.data.entity.DataPanGas; import com.casic.missiles.modular.data.service.IDataPanGasService; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.CommonUtil; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonToken; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.io.IOException; import java.util.Date; import java.util.List; import java.util.Map; @@ -68,78 +72,179 @@ } - @Transactional @Override public boolean processAcceptGasData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); - JSONArray jsonArray = jsonObject.getJSONArray("data"); - String devCode = ""; - for (int i = 0; i < jsonArray.size(); i++) { - try { - devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); - if (ObjectUtil.isEmpty(devCode)) continue; - List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); - String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); - String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); - //暂只存浓度 - if ("2".equals(attributeType)) continue; - String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); - gas = String.format("%.2f", Double.valueOf(gas)); - //1.存数据 - save(DataPanGas.builder() - .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") - .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") - .deviceCode(devCode) - .concentration(gas) - .logtime(DateUtil.parseDateTime(dataTime)) - .build());//存储采集数据 - //2.有无超限处理流程(判断最后一条数据) -// if (i < jsonArray.size() - 1) continue; - - //3.清除设备告警 - alarmRecordsService.cancelDeviceAlarm(devCode); - //4.存报警 - //若没绑场站,则不产生报警 - boolean alarmFlag = false; - String bfcf = busDeviceService.getBfcf(devCode); - 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))) { - dataTime = dataTime.replaceAll("-", ""); - dataTime = dataTime.replaceAll(":", ""); - dataTime = dataTime.replaceAll("\\s+", ""); - alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); - } - break; - } - } - } - //5.清数据报警 - if (!alarmFlag) { - alarmRecordsService.cancelDataAlarm(devCode); - } - //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); - //7.更新监测井状态 (1:正常,2:报警) - if (busWellDTOList != null && busWellDTOList.size() > 0) { - alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); - } - } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + JsonFactory factory = new JsonFactory(); + try (JsonParser parser = factory.createParser(jsonObject.getString("data"))) { + // 定位到 "data" 数组 + while (parser.nextToken() != JsonToken.START_ARRAY) { + parser.nextToken(); } + // 逐条处理数据 + while (parser.nextToken() != JsonToken.END_ARRAY) { + if (parser.getCurrentToken() == JsonToken.START_OBJECT) { + processSingleData(parseJsonObject(parser)); + } + + } + } catch (IOException e) { + e.printStackTrace(); } + return true; } + private PanDataDTO parseJsonObject(JsonParser parser) throws IOException { + PanDataDTO panDataDTO = new PanDataDTO(); + while (parser.nextToken() != JsonToken.END_OBJECT) { + String fieldName = parser.getCurrentName(); + if ("dataTime".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataTime(parser.getText()); + } else if ("attributeType".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setAttributeType(parser.getText()); + } else if ("dataValue".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataValue(parser.getText()); + } else if ("deviceCode".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDeviceCode(parser.getText()); + } + } + return panDataDTO; + } + + + private void processSingleData(PanDataDTO panDataDTO) { + try { + String devCode = panDataDTO.getDeviceCode(); + if (ObjectUtil.isEmpty(devCode)) return; + List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); + String gas = panDataDTO.getDataValue(); + String attributeType = panDataDTO.getAttributeType(); + //暂只存浓度 + if ("2".equals(attributeType)) return; + String dataTime = panDataDTO.getDataTime(); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataPanGas.builder() + .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .deviceCode(devCode) + .concentration(gas) + .logtime(DateUtil.parseDateTime(dataTime)) + .build());//存储采集数据 + + boolean alarmFlag = false; + String bfcf = busDeviceService.getBfcf(devCode); + 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))) { +// dataTime = dataTime.replaceAll("-", ""); +// dataTime = dataTime.replaceAll(":", ""); +// dataTime = dataTime.replaceAll("\\s+", ""); + alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); + //7.更新监测井状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + log.error("处理云台数据时发生异常,devcode:{},data:{},e:{}", panDataDTO.getDeviceCode(), panDataDTO.toString(), e); + } + } + + +// @Transactional +// @Override +// public boolean processAcceptGasData(Map dataParams) { +// JSONObject jsonObject = new JSONObject(dataParams); +// JSONArray jsonArray = jsonObject.getJSONArray("data"); +// String devCode = ""; +// for (int i = 0; i < jsonArray.size(); i++) { +// try { +// devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); +// if (ObjectUtil.isEmpty(devCode)) continue; +// List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); +// String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); +// String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); +// //暂只存浓度 +// if ("2".equals(attributeType)) continue; +// String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); +// gas = String.format("%.2f", Double.valueOf(gas)); +// //1.存数据 +// save(DataPanGas.builder() +// .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") +// .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") +// .deviceCode(devCode) +// .concentration(gas) +// .logtime(DateUtil.parseDateTime(dataTime)) +// .build());//存储采集数据 +// //2.有无超限处理流程(判断最后一条数据) +//// if (i < jsonArray.size() - 1) continue; +// +// //3.清除设备告警 +//// alarmRecordsService.cancelDeviceAlarm(devCode); +// //4.存报警 +// //若没绑场站,则不产生报警 +// boolean alarmFlag = false; +// String bfcf = busDeviceService.getBfcf(devCode); +// 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))) { +//// dataTime = dataTime.replaceAll("-", ""); +//// dataTime = dataTime.replaceAll(":", ""); +//// dataTime = dataTime.replaceAll("\\s+", ""); +// alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); +// } +// break; +// } +// } +// } +// //5.清数据报警 +// if (!alarmFlag) { +// alarmRecordsService.cancelDataAlarm(devCode); +// } +// //6.更新电量及状态 (1:正常,2:报警) +// alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); +// //7.更新监测井状态 (1:正常,2:报警) +// if (busWellDTOList != null && busWellDTOList.size() > 0) { +// alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); +// } +// } catch (Exception e) { +// log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); +// } +// } +// return true; +// } + @Override public boolean acceptAlarmData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); 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 37d731d..a17953b 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataTubeOtherServiceImpl extends ServiceImpl implements IDataTubeOtherService, IDataAbstractService { @@ -73,7 +75,7 @@ } } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,7 +84,7 @@ imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -122,8 +124,8 @@ } //特殊处理消警 if ("CancelWaterImmersionAlarm".equals(alarmType)) { - if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { - alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + if (alarmRecordsService.isWatchAlarms(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelWatchAlarms(devCode, "WaterImmersionAlarm"); } continue; } @@ -146,8 +148,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmType)); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -227,8 +228,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java new file mode 100644 index 0000000..3be65dd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java @@ -0,0 +1,170 @@ +package com.casic.missiles.modular.aop; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.aop.annotion.ReflectionUtils; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.modular.interfaces.log.LogManager; +import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.Serializable; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Aspect +@Component +public class OperateLogAspect { + private Logger log = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private ApplicationContext applicationContext; + + public static volatile Map oldMap = new HashMap<>(); + + public OperateLogAspect() { + } + + @Pointcut("@annotation(com.casic.missiles.modular.aop.annotion.OperateLog)") + public void cutService() { + } + + @Around("cutService()") + public Object recordSysLog(ProceedingJoinPoint point) throws Throwable { + Object result = point.proceed(); + + try { + this.handle(point); + } catch (Exception var4) { + this.log.error("日志记录出错!", var4); + } + + return result; + } + + /** + * 处理请求前执行 + */ + @Before(value = "@annotation(operateLog)") + public void boBefore(JoinPoint joinPoint, OperateLog operateLog) { + Object info = joinPoint.getArgs()[0]; + if ("edit".equals(operateLog.type()) && operateLog.needDefaultCompare()) { + Class cls = operateLog.serviceClass(); + IService service = (IService) applicationContext.getBean(cls); + Object result; + if (service instanceof IBusDeviceService) { + result = ((IBusDeviceService) service).getByDeviceId((Long) ReflectionUtils.getFieldValue(info, "id")); + } else + result = service.getById((Serializable) ReflectionUtils.getFieldValue(info, "id")); + oldMap = (Map) objectToMap(result); // 存储修改前的对象 + } + } + + private void handle(ProceedingJoinPoint point) throws Exception { + Signature sig = point.getSignature(); + MethodSignature msig = null; + if (!(sig instanceof MethodSignature)) { + throw new IllegalArgumentException("该注解只能用于方法"); + } else { + msig = (MethodSignature) sig; + Object target = point.getTarget(); + Method currentMethod = target.getClass().getMethod(msig.getName(), msig.getParameterTypes()); + String methodName = currentMethod.getName(); + AuthUser user = ShiroKit.getUser(); + if (null != user) { + String className = point.getTarget().getClass().getName(); + Object[] params = point.getArgs(); + OperateLog annotation = (OperateLog) currentMethod.getAnnotation(OperateLog.class); + String bussinessName = annotation.value(); + String key = annotation.key(); + Class dictClass = annotation.dict(); + String sb = argsArrayToString(params); + String msg = sb; + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + if ("add".equals(annotation.type())) { + Map parameters = (Map) objectToMap(params[0]); + msg = CollectionUtils.isEmpty(parameters) ? sb : ReflectionUtils.parseMutiKey(dictMap, key, parameters); + } else if ("edit".equals(annotation.type())) { + msg = CollectionUtils.isEmpty(oldMap) ? sb : ReflectionUtils.contrastObj(dictClass, key, params[0], oldMap); + }else if("delete".equals(annotation.type())){ + msg=dictMap.get(annotation.key())+":"+ReflectionUtils.getDeleteKeys(params[0]); + } + LogManager.me().executeLog(LogTaskFactory.bussinessLog(user.getId(), bussinessName, className, methodName, msg)); + } + } + } + + + /** + * 参数拼装 + */ + private String argsArrayToString(Object[] paramsArray) { + Gson gson = new GsonBuilder().create(); + String params = ""; + if (paramsArray != null && paramsArray.length > 0) { + for (int i = 0; i < paramsArray.length; i++) { + if (!isFilterObject(paramsArray[i])) { + params += gson.toJson(paramsArray[i]) + " & "; + } + } + } + return params.trim(); + } + + + /** + * 判断是否需要过滤的对象。 + * + * @param o 对象信息。 + * @return 如果是需要过滤的对象,则返回true;否则返回false。 + */ + public boolean isFilterObject(final Object o) { + return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse; + } + + private Map objectToMap(Object obj) { + if (obj == null) { + return null; + } + ObjectMapper mapper = new ObjectMapper(); + mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + // 如果使用JPA请自己打开这条配置 + // mapper.addMixIn(Object.class, IgnoreHibernatePropertiesInJackson.class); + Map mappedObject = mapper.convertValue(obj, Map.class); + return mappedObject; + + + } +} + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java new file mode 100644 index 0000000..77afa9c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.aop.annotion; + +import java.lang.annotation.*; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.FIELD}) +@Documented +public @interface DataName { + String name() default ""; // 字段名称 + + /** + * 读取枚举内容转义表达式 (如: 0=男,1=女,2=未知) + */ + String readConverterExp() default ""; +} + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java new file mode 100644 index 0000000..f1f59ad --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.aop.annotion; + + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.common.constant.dictmap.base.SystemDict; + +import java.lang.annotation.*; + +@Inherited +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.METHOD}) +public @interface OperateLog { + String value() default ""; + + String key() default "id"; + + Class serviceClass() default IService.class; + + // 是否需要比较新旧数据 + boolean needDefaultCompare() default true; + + //操作类型 add update delete + String type() default "update"; + + Class dict() default SystemDict.class; +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java new file mode 100644 index 0000000..eb773ad --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java @@ -0,0 +1,328 @@ +package com.casic.missiles.modular.aop.annotion; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.modular.interfaces.dictmap.factory.DictFieldWrapperFactory; +import lombok.extern.slf4j.Slf4j; + +import java.beans.PropertyDescriptor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.*; + +import static com.casic.missiles.modular.interfaces.utils.Contrast.firstCharToLowerCase; +import static com.casic.missiles.modular.interfaces.utils.Contrast.firstCharToUpperCase; + +@Slf4j +public class ReflectionUtils { + + /** + * 直接读取对象属性值, 无视private/protected修饰符, 不经过getter函数. + * + * @param obj 读取的对象 + * @param fieldName 读取的列 + * @return 属性值 + */ + public static Object getFieldValue(final Object obj, final String fieldName) { + Field field = getAccessibleField(obj, fieldName); + if (field == null) { + throw new IllegalArgumentException("Could not find field [" + fieldName + "] on target [" + obj + "]"); + } + + Object result = null; + try { + result = field.get(obj); + } catch (IllegalAccessException e) { + log.error("不可能抛出的异常{}", e.getMessage()); + e.printStackTrace(); + } + return result; + } + + /** + * 循环向上转型, 获取对象的DeclaredField, 并强制设置为可访问.如向上转型到Object仍无法找到, 返回null. + * + * @param obj 查找的对象 + * @param fieldName 列名 + * @return 列 + */ + public static Field getAccessibleField(final Object obj, final String fieldName) { + for (Class superClass = obj.getClass(); superClass != Object.class; superClass = superClass.getSuperclass()) { + try { + Field field = superClass.getDeclaredField(fieldName); + makeAccessible(field); + return field; + } catch (NoSuchFieldException e) { // NOSONAR + // Field不在当前类定义,继续向上转型 + e.printStackTrace(); + continue; // new add + } + } + return null; + } + + /** + * 改变private/protected的成员变量为public,尽量不调用实际改动的语句,避免JDK的SecurityManager抱怨。 + * + * @param + */ + public static void makeAccessible(Field field) { + if ((!Modifier.isPublic(field.getModifiers()) || !Modifier.isPublic(field.getDeclaringClass().getModifiers()) || Modifier + .isFinal(field.getModifiers())) && !field.isAccessible()) { + field.setAccessible(true); + } + } + + /** + * 获取两个对象同名属性内容不相同的列表 + * + * @param class1 old对象 + * @param class2 new对象 + * @return 区别列表 + * @throws ClassNotFoundException 异常 + * @throws IllegalAccessException 异常 + */ + public static List> compareTwoClass(Object class1, Object class2) throws ClassNotFoundException, IllegalAccessException { + List> list = new ArrayList>(); + // 获取对象的class + Class clazz1 = class1.getClass(); + Class clazz2 = class2.getClass(); + // 获取对象的属性列表 + Field[] field1 = clazz1.getDeclaredFields(); + Field[] field2 = clazz2.getDeclaredFields(); + StringBuilder sb = new StringBuilder(); + // 遍历属性列表field1 + for (int i = 0; i < field1.length; i++) { + // 遍历属性列表field2 + for (int j = 0; j < field2.length; j++) { + // 如果field1[i]属性名与field2[j]属性名内容相同 + if (field1[i].getName().equals(field2[j].getName())) { + if (field1[i].getName().equals(field2[j].getName())) { + field1[i].setAccessible(true); + field2[j].setAccessible(true); + // 如果field1[i]属性值与field2[j]属性值内容不相同 + if (!compareTwo(field1[i].get(class1), field2[j].get(class2))) { + Map map2 = new HashMap(); + DataName name = field1[i].getAnnotation(DataName.class); + String fieldName = ""; + if (name != null) { + fieldName = name.name(); + } else { + fieldName = field1[i].getName(); + } + map2.put("name", fieldName); + map2.put("old", field1[i].get(class1)); + map2.put("new", field2[j].get(class2)); + list.add(map2); + } + break; + } + } + } + } + return list; + } + + /** + * 对比两个数据是否内容相同 + * + * @param object1 比较对象1 + * @param object2 比较对象2 + * @return boolean类型 + */ + public static boolean compareTwo(Object object1, Object object2) { + if (object1 == null && object2 == null) { + return true; + } + if (object1 == null && object2 != null) { + return false; + } + if (object1.equals(object2)) { + return true; + } + return false; + } + + public static String contrastObjByName(Class dictClass, String key, Object pojo1, Map pojo2) throws IllegalAccessException, InstantiationException { + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + String str = parseMutiKey(dictMap, key, pojo2) + ";;;"; + + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if (!"serialVersionUID".equals(field.getName())) { + String prefix = "get"; + int prefixLength = 3; + if (field.getType().getName().equals("java.lang.Boolean")) { + prefix = "is"; + prefixLength = 2; + } + + Method getMethod = null; + + try { + getMethod = clazz.getDeclaredMethod(prefix + firstCharToUpperCase(field.getName())); + } catch (NoSuchMethodException var22) { + System.err.println("this className:" + clazz.getName() + " is not methodName: " + var22.getMessage()); + continue; + } + + Object o1 = getMethod.invoke(pojo1); + Object o2 = pojo2.get(firstCharToLowerCase(getMethod.getName().substring(prefixLength))); + if (o1 != null && o2 != null) { + if (o1 instanceof Date) { + o1 = DateUtil.format(new Date(), "yyyy-MM-dd"); + } else if (o1 instanceof Integer) { + o2 = Integer.parseInt(o2.toString()); + } + + if (!o1.toString().equals(o2.toString())) { + if (i != 1) { + str = str + ";;;"; + } + + String fieldName = dictMap.get(field.getName()); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(field.getName()); + if (fieldWarpperMethodName != null) { + Object o1Warpper = DictFieldWrapperFactory.createFieldWrapper(o1, fieldWarpperMethodName); + Object o2Warpper = DictFieldWrapperFactory.createFieldWrapper(o2, fieldWarpperMethodName); + str = str + "字段名称:" + fieldName + ",旧值:" + o1Warpper + ",新值:" + o2Warpper; + } else { + str = str + "字段名称:" + fieldName + ",旧值:" + o1 + ",新值:" + o2; + } + + ++i; + } + } + } + } + } catch (Exception var23) { + var23.printStackTrace(); + } + + return str; + } + + public static String parseMutiKey(AbstractDictMap dictMap, String key, Map requests) { + StringBuilder sb = new StringBuilder(); + if (key.indexOf(",") != -1) { + String[] keys = key.split(","); + String[] var13 = keys; + int var14 = keys.length; + + for (int var7 = 0; var7 < var14; ++var7) { + String item = var13[var7].trim(); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(item); + Object value = requests.get(item); + if (fieldWarpperMethodName != null) { + Object valueWarpper = DictFieldWrapperFactory.createFieldWrapper(value, fieldWarpperMethodName); + sb.append(dictMap.get(item) + "=" + valueWarpper + ","); + } else { + sb.append(dictMap.get(item) + "=" + (ObjectUtil.isNotEmpty(value) ? value.toString() : "") + ","); + } + } + + return StrUtil.removeSuffix(sb.toString(), ","); + } else { + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(key); + Object value = requests.get(key); + if (fieldWarpperMethodName != null) { + Object valueWarpper = DictFieldWrapperFactory.createFieldWrapper(value, fieldWarpperMethodName); + sb.append(dictMap.get(key) + "=" + valueWarpper); + } else { + sb.append(dictMap.get(key) + "=" + (ObjectUtil.isNotEmpty(value) ? value.toString() : "")); + } + + return sb.toString(); + } + } + + public static String getDeleteKeys(Object pojo1) { + String str = ""; + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if ("keys".equals(field.getName())) { + PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); + Method getMethod = pd.getReadMethod(); + Object o1 = getMethod.invoke(pojo1); + return ObjectUtil.isNotEmpty(o1) ? o1.toString().replaceAll("\\[|]", "") : "".concat(",已删除"); + } + } + + } catch (Exception var21) { + var21.printStackTrace(); + } + return str; + } + + public static String contrastObj(Class dictClass, String key, Object pojo1, Map pojo2) throws IllegalAccessException, InstantiationException { + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); +// String str = parseMutiKey(dictMap, key, pojo2) + ";;;"; + String str = ""; + + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if (!"serialVersionUID".equals(field.getName())) { + PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); + Method getMethod = pd.getReadMethod(); + Object o1 = getMethod.invoke(pojo1); + Object o2 = pojo2.get(firstCharToLowerCase(getMethod.getName().substring(3))); + if (o1 != null && o2 != null) { + if (o1 instanceof Integer) { + o2 = Integer.parseInt(o2.toString()); + } else if (o1 instanceof Date) { + o1 = DateUtil.format((Date) o1, "yyyy-MM-dd HH:mm:ss"); + } + + if (!o1.toString().equals(o2.toString())) { + if (i != 1) { + str = str + ";"; + } + + String fieldName = dictMap.get(field.getName()); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(field.getName()); + if (fieldWarpperMethodName != null) { + Object o1Warpper = DictFieldWrapperFactory.createFieldWrapper(o1, fieldWarpperMethodName); + Object o2Warpper = DictFieldWrapperFactory.createFieldWrapper(o2, fieldWarpperMethodName); + str = str + fieldName + ":将【" + o1Warpper + "】,改为【" + o2Warpper + "】"; + } else { + str = str + fieldName + ":将【" + o1 + "】,改为【" + o2 + "】"; + } + + ++i; + } + } + } + } + } catch (Exception var21) { + var21.printStackTrace(); + } + + return str; + } + + +} \ No newline at end of file diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java index 7497ebf..18fd820 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java @@ -8,12 +8,14 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.StateDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.DeviceTypeDict; import com.casic.missiles.modular.device.dto.BaseDeviceTypeDTO; import com.casic.missiles.modular.device.dto.BaseDeviceTypeIdsDTO; import com.casic.missiles.modular.device.dto.SelectDTO; @@ -63,6 +65,7 @@ return ReturnUtil.success(super.packForBT(baseDeviceTypePage)); } + @OperateLog(value = "新增设备类型", key = "typeName,watchObject,isUsed,typeDescription", dict = DeviceTypeDict.class, type = "add") @ApiOperation("增加设备类型") @PostMapping("/add") @ResponseBody @@ -71,6 +74,7 @@ return ReturnUtil.success(iBaseDeviceTypeService.saveBaseDeviceType(baseDeviceType)); } + @OperateLog(value = "编辑设备类型", dict = DeviceTypeDict.class, serviceClass = IBaseDeviceTypeService.class, type = "edit") @ApiOperation("编辑设备类型") @PostMapping("/edit") @ResponseBody @@ -81,10 +85,11 @@ return ReturnUtil.success(iBaseDeviceTypeService.updateById(baseDeviceType)); } + @OperateLog(value = "删除设备类型", key = "typeName", dict = DeviceTypeDict.class, serviceClass = IBaseDeviceTypeService.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); @@ -113,7 +118,7 @@ public ReturnDTO selectList(@RequestBody BaseDeviceTypeIdsDTO request) { QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.in(request.getDeviceTypeList()!=null&&request.getDeviceTypeList().size()>0, "id", request.getDeviceTypeList()); + queryWrapper.in(request.getDeviceTypeList() != null && request.getDeviceTypeList().size() > 0, "id", request.getDeviceTypeList()); queryWrapper.eq("IS_USED", "1"); List baseDeviceTypes = iBaseDeviceTypeService.list(queryWrapper); List selectDTOS = new ArrayList<>(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java index 42d752d..54944e2 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java @@ -3,14 +3,15 @@ import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.IdDTO; -import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.ProductDict; import com.casic.missiles.modular.device.dto.BaseProductDTO; import com.casic.missiles.modular.device.dto.SelectProductDTO; import com.casic.missiles.modular.device.entity.BaseProduct; @@ -21,7 +22,6 @@ import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; -import java.util.List; import java.util.Objects; /** @@ -49,6 +49,7 @@ return ReturnUtil.success(super.packForBT(iBaseProductService.pageList(page, requestDTO))); } + @OperateLog(value = "新增产品", key = "productName,deviceType,deviceModel,manufacturerId,protocol,accessMethod,powerSupplyMode,dataService", dict = ProductDict.class, type = "add") @ApiOperation("新增") @PostMapping("/add") @ResponseBody @@ -58,6 +59,7 @@ } + @OperateLog(value = "编辑产品", dict = ProductDict.class, serviceClass = IBaseProductService.class, type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -68,10 +70,11 @@ return ReturnUtil.success(iBaseProductService.updateBaseProductById(baseProduct)); } + @OperateLog(value = "删除产品", key = "productName", dict = ProductDict.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 509bd7b..103acf2 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 @@ -9,6 +9,7 @@ import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; @@ -17,6 +18,7 @@ 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.aop.annotion.OperateLog; import com.casic.missiles.modular.device.dict.BusConfigDict; import com.casic.missiles.modular.device.dict.DeviceDict; import com.casic.missiles.modular.device.dto.*; @@ -65,7 +67,8 @@ } - @BussinessLog(value = "新增设备", key = "devcode,deviceName,deviceType,installDate,productId", dict = DeviceDict.class) + @OperateLog(value = "新增设备", key = "devcode,deviceType,productId," + + "valid,communicationType,simId,warrantyPeriod,tagNumber,leftLength,rightLength,", dict = DeviceDict.class,type = "add") @CacheEvict(value="busLedgersCache", key="#busDevice.getDevcode()") @ApiOperation("新增") @PostMapping("/add") @@ -75,7 +78,8 @@ } - @BussinessLog(value = "编辑设备", key = "devcode,deviceName,deviceType,installDate,productId", dict = DeviceDict.class) + @OperateLog(value = "编辑设备", key = "devcode,deviceType,installDate,productId," + + "leftLength,rightLength,communicationType,simId,warrantyPeriod", dict = DeviceDict.class,serviceClass = IBusDeviceService.class,type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -86,11 +90,12 @@ return ReturnUtil.success(iBusDeviceService.updateBusDevice(busDevice)); } + @OperateLog(value = "删除设备", key = "devcode", dict = DeviceDict.class,serviceClass = IBusDeviceService.class,type = "delete") @CacheEvict(value="busLedgersCache", allEntries = true) @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 31de56e..6f35acd 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 @@ -4,8 +4,8 @@ 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.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.page.PageFactory; @@ -16,11 +16,8 @@ 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.BusDeviceDTO; -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.BusDevice; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.CommonUtil; @@ -53,6 +50,7 @@ private final IBusLedgerPipeService iBusLedgerPipeService; private final IBaseExportService iBaseExportService; + private final AbstractDictService abstractDictService; @ApiOperation("新建点位") @PostMapping("/addPosition") @@ -60,10 +58,10 @@ 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,"安装位号已存!!!"); + if (busLedgerPipeList != null && busLedgerPipeList.size() > 0) { + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE, "安装位号已存!!!"); } - Long id =IdUtil.getSnowflake(1,2).nextId(); + Long id = IdUtil.getSnowflake(1, 2).nextId(); busLedgerPipe.setId(id); busLedgerPipe.setLedgerCode(busLedgerPipe.getTagNumber()); busLedgerPipe.setArea(CommonUtil.getAreaCode(busLedgerPipe.getPosition())); @@ -139,7 +137,11 @@ page.setCurrent(1); page.setSize(Integer.MAX_VALUE); Page devicePage = iBusLedgerPipeService.listPage(page, busLedgerPipeRequestDTO); + List records = devicePage.getRecords(); try { + for (BusLedgerPipe busLedgerPipe : records) { + busLedgerPipe.setLocationCategory(abstractDictService.getDictNameByCode("locationType", busLedgerPipe.getLocationCategory())); + } iBaseExportService.exportExcel(response, BusLedgerPipe.class, devicePage.getRecords(), ExportEnum.LEDGER_PIPE_EXPORT.getSheetName()); } catch (Exception e) { e.printStackTrace(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java index e87f3f8..8040c74 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java @@ -7,10 +7,13 @@ 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.DeletesDTO; import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.ProtocolDict; import com.casic.missiles.modular.device.dto.BusProtocolDTO; import com.casic.missiles.modular.device.entity.BusProtocol; import com.casic.missiles.modular.device.service.IBusProtocolService; @@ -35,10 +38,10 @@ @RestController @RequestMapping("/system/busProtocol") public class BusProtocolController extends ExportController { - + private final IBusProtocolService protocolService; - + @ApiOperation("查询分页接口") @PostMapping("/listPage") @ResponseBody @@ -47,9 +50,10 @@ queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getProtocolName()), "PROTOCOL_NAME", requestDTO.getProtocolName()); queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getProtocolCode()), "PROTOCOL_CODE", requestDTO.getProtocolCode()); Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(protocolService.page(page,queryWrapper))); + return ReturnUtil.success(super.packForBT(protocolService.page(page, queryWrapper))); } + @OperateLog(value = "新增协议", key = "protocolName,protocolCode,version,ip,description", dict = ProtocolDict.class, type = "add") @ApiOperation("新增") @PostMapping("/add") @ResponseBody @@ -58,6 +62,7 @@ return ReturnUtil.success(protocolService.save(busProtocol)); } + @OperateLog(value = "编辑协议", dict = ProtocolDict.class, serviceClass = IBusProtocolService.class, type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -68,10 +73,11 @@ return ReturnUtil.success(protocolService.updateById(busProtocol)); } + @OperateLog(value = "删除协议", key = "protocolName", dict = ProtocolDict.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 23ddee9..24c4712 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 @@ -2,7 +2,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.entity.BusDevice; import com.casic.missiles.util.InConditionDriver; @@ -46,27 +45,27 @@ @Param("orderColumn") String orderColumn, @Param("request") CommonRequestDTO request); - @Select("SELECT BFZT from bus_device where VALID=1 and DEVCODE= #{devcode} limit 1" ) - String getBfcf( @Param("devcode") String devcode); + @Select("SELECT BFZT from bus_device where VALID=1 and DEVCODE= #{devcode} limit 1") + String getBfcf(@Param("devcode") String devcode); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getMethaneData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getMethaneData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_tube_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getTubeOtherData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_tube_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getTubeOtherData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gasliquid_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getLGData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gasliquid_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getLGData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_monitor_pipe_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getMonitorPipeOtherData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_monitor_pipe_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getMonitorPipeOtherData(@Param("devcodes") List devcodes); - @Select("SELECT ALARM_THRESHOLD FROM `alarm_rule_device` where DEVCODE = #{devcode} order by ALARM_THRESHOLD asc " ) + @Select("SELECT ALARM_THRESHOLD FROM `alarm_rule_device` where DEVCODE = #{devcode} order by ALARM_THRESHOLD asc ") List getSpecialDeviceRule(@Param("devcode") String devcode); @Select(" select ar.ALARM_THRESHOLD from alarm_rule ar where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + @@ -81,4 +80,7 @@ "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") List getListByWellId(@Param("wellId") Long wellId); + + BusDeviceOperateLogDTO getByDeviceId(@Param("id") Long id); + } 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 8ba4b15..3109344 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 @@ -44,7 +44,7 @@ LEFT JOIN base_product bp ON bd.PRODUCT_ID = bp.ID LEFT JOIN bus_device_ledger br on br.DEVICE_ID = bd.ID AND br.VALID='1' LEFT JOIN bus_manufacturer bm on bm.ID = bp.MANUFACTURER_ID - LEFT JOIN bus_ledger_all_view bl on bl.ID = br.LEDGER_ID AND br.VALID='1' and bl.type = br.type + LEFT JOIN bus_ledger_all_view bl on bl.ID = br.LEDGER_ID AND bl.VALID='1' and bl.type = br.type where bd.valid>0 @@ -95,6 +95,32 @@ + + + SELECT - rd.*, - at.alarm_type, - bt.TYPE_NAME as devTypeName - FROM - alarm_records rd - LEFT JOIN bus_ledger_all_view lr ON lr.ledgerCode = rd.LEDGER_CODE - LEFT JOIN alarm_type at ON at.ID = rd.ALARM_TYPE_ID - LEFT JOIN bus_device bd ON bd.DEVCODE = rd.DEVCODE and bd.valid >0 - LEFT JOIN base_device_type bt ON bt.id = bd.DEVICE_TYPE + rd.*, + AT.alarm_type, + bt.TYPE_NAME AS devTypeName + FROM + alarm_records rd + LEFT JOIN bus_device bd ON bd.DEVCODE = rd.DEVCODE + AND bd.valid > 0 + LEFT JOIN bus_device_ledger bl ON bd.ID = bl.DEVICE_ID + AND bl.VALID = '1' + 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' + AND lr.ledgerCode = rd.LEDGER_CODE + LEFT JOIN alarm_type AT ON AT.ID = rd.ALARM_TYPE_ID + LEFT JOIN base_device_type bt ON bt.id = bd.DEVICE_TYPE where rd.STATUS ='1' and rd.EXCEPTION_TYPE='0' @@ -695,6 +705,7 @@ dt.LOGTIME, bv.tagNumber, bv.ledgerCode, + bv.ledgerName, bdt.TYPE_NAME, bv.place, bv.type, @@ -720,6 +731,7 @@ t.tagNumber, t.ledgerCode, t.TYPE_NAME, + t.ledgerName, t.OFF_DAYS, t.LOGTIME, t.place, diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml index 7aff0f0..a63dac1 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml @@ -25,34 +25,55 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java index 3e0edd6..9dab3a7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java @@ -71,4 +71,18 @@ private Long deptid; + @ApiModelProperty("经度") + private String lngGaode; + + @ApiModelProperty("纬度") + private String latGaode; + + @ApiModelProperty("监测类型") + private String watchObject; + + @ApiModelProperty("点位id") + private Long ledgerId; + + + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java index e938da8..60464c4 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java @@ -12,6 +12,7 @@ private String deviceType; private String tagNumber; private String ledgerCode; + private String ledgerName; private String place; //台账类型 private String type; 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 ac4cabe..e623df7 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 @@ -44,6 +44,7 @@ import static cn.hutool.core.date.DateUnit.DAY; import static com.casic.missiles.util.TimeConvertUtil.TimeConverter; +import static com.casic.missiles.util.TimeConvertUtil.TimeConverterSecond; /** *

@@ -180,8 +181,8 @@ public DeviceAlarmDetailDTO deviceAlarmDetail(Long id) { DeviceAlarmDetailDTO alarmDetail = this.baseMapper.deviceAlarmDetail(id); - alarmDetail.setCancelDuration(TimeConverter(alarmDetail.getCancelDuration())); - alarmDetail.setProcessDuration(TimeConverter(alarmDetail.getProcessDuration())); + alarmDetail.setCancelDuration(TimeConverterSecond(alarmDetail.getCancelDuration())); + alarmDetail.setProcessDuration(TimeConverterSecond(alarmDetail.getProcessDuration())); alarmDetail.setDeptName(ObjectUtil.isNotEmpty(alarmDetail.getDeptid()) ? commonServer.getDeptNamesByDeptId(alarmDetail.getDeptid()) : ""); // alarmDetail.setAddress(alarmDetail.getTagNumber().concat("|").concat(alarmDetail.getLedgerName())); alarmDetail.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmDetail.getAlarmCategory())); @@ -524,16 +525,26 @@ @Override public void cancelDeviceAlarm(String devCode) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("DEVCODE", devCode); - updateWrapper.eq("EXCEPTION_TYPE", "1"); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE", devCode); + queryWrapper.eq("EXCEPTION_TYPE", "1"); //只有挂起和已处置的才消 // updateWrapper.ge("PROCESS_STATUS", "3"); - updateWrapper.eq("STATUS", "1"); - updateWrapper.set("STATUS", "0"); - updateWrapper.set("CANCEL_TIME", new Date()); - this.update(updateWrapper); - //toDo:需要加流程取消日志 + queryWrapper.eq("STATUS", "1"); + List alarmRecordsList = this.list(queryWrapper); + if (alarmRecordsList != null && alarmRecordsList.size() > 0) { + alarmRecordsList.forEach(alarmRecords -> { + alarmRecords.setStatus("0"); + alarmRecords.setCancelTime(new Date()); + alarmRecords.setPreProcessStatus(alarmRecords.getProcessStatus()); + alarmRecords.setProcessStatus(ApprovalStatusEnum.FINISHED.getCode()); + this.updateById(alarmRecords); + }); + //添加流程日志 + approvalLogMapper.insert(new ApprovalLog(alarmRecordsList.get(0).getId(), "1", + "", ApprovalStatusEnum.FINISHED.getCode(), + null)); + } } @Override @@ -674,8 +685,12 @@ AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), data.concat("%LEL"), data, - alarmRuleResponseDTO.getAlarmLevelId(),DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmLevelId(), DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmRuleResponseDTO.getAlarmTypeName(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -721,7 +736,7 @@ @Override - public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime,List busWellDTOList, + public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime, List busWellDTOList, Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { @@ -730,8 +745,12 @@ try { AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, - alarmLevelId, DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmLevelId, DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmTypeName, + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace() + , "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -793,7 +812,11 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.get().getAlarmTypeId(), alarmRuleResponseDTO.get().getAlarmTypeName(), alarmRuleResponseDTO.get().getAlarmLevelId(), DateUtil.parse(logTime), - alarmRuleResponseDTO.get().getAlarmThreshold(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "1"); + alarmRuleResponseDTO.get().getAlarmThreshold(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "1"); this.save(alarmRecords); } catch (Exception e) { e.printStackTrace(); @@ -846,8 +869,8 @@ * @param cell */ @Override - public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent,String logTime) { - this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent,DateUtil.parse(logTime)); + public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent, String logTime) { + this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent, DateUtil.parse(logTime)); } @Override @@ -903,7 +926,10 @@ offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), - offDeviceDTO.getPlace(), "1"); + ObjectUtil.isNotEmpty(offDeviceDTO.getLedgerName()) ? + offDeviceDTO.getTagNumber().concat("|"). + concat(offDeviceDTO.getLedgerName()) : + offDeviceDTO.getPlace(), "1"); alarmRecordsList.add(alarmRecords); ledgers.add(offDeviceDTO); } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java new file mode 100644 index 0000000..cb554b9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.data.dto; + + +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class PanDataDTO implements Serializable { + + private static final long serialVersionUID = 1232822221212L; + + private String dataTime; + + private String attributeType; + + private String dataValue; + + private String deviceCode; + + + +} 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 index a082d00..2a943ad 100644 --- 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 @@ -23,6 +23,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -37,6 +38,7 @@ * @author zt * @since 2025-01-22 */ +@Slf4j @RequiredArgsConstructor @Service public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { @@ -71,8 +73,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -80,8 +81,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}",devCode, e); } } @@ -141,8 +141,7 @@ } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -222,8 +221,10 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); +// e.printStackTrace(); +// log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); + } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java index dd80611..cd24860 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java @@ -83,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -124,8 +123,7 @@ busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -200,8 +198,7 @@ alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } //低电量报警处理 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 302b446..f0def39 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 @@ -76,8 +76,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -85,8 +84,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -133,8 +131,7 @@ if (i < jsonArray.size() - 1) continue; busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -217,8 +214,7 @@ } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } 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 e5ba8f7..a02af88 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataMonitorPipeOtherServiceImpl extends ServiceImpl implements IDataMonitorPipeOtherService, IDataAbstractService { @@ -73,8 +75,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -116,8 +116,7 @@ //2.写入新的报警 alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + log.error("处理报警时发生异常,devcode:{},e:{}", devCode, e); } } } @@ -160,8 +159,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmEventCode)); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -341,8 +339,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag || ObjectUtil.isNotEmpty(alarmContent) ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java index 5dc8c2b..f383690 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java @@ -2,7 +2,6 @@ import cn.hutool.core.date.DateUtil; 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; @@ -13,15 +12,20 @@ import com.casic.missiles.modular.alarm.service.IAlarmRuleService; import com.casic.missiles.modular.data.dao.DataGasMapper; import com.casic.missiles.modular.data.dao.DataPanGasMapper; +import com.casic.missiles.modular.data.dto.PanDataDTO; import com.casic.missiles.modular.data.entity.DataPanGas; import com.casic.missiles.modular.data.service.IDataPanGasService; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.CommonUtil; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonToken; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.io.IOException; import java.util.Date; import java.util.List; import java.util.Map; @@ -68,78 +72,179 @@ } - @Transactional @Override public boolean processAcceptGasData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); - JSONArray jsonArray = jsonObject.getJSONArray("data"); - String devCode = ""; - for (int i = 0; i < jsonArray.size(); i++) { - try { - devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); - if (ObjectUtil.isEmpty(devCode)) continue; - List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); - String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); - String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); - //暂只存浓度 - if ("2".equals(attributeType)) continue; - String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); - gas = String.format("%.2f", Double.valueOf(gas)); - //1.存数据 - save(DataPanGas.builder() - .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") - .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") - .deviceCode(devCode) - .concentration(gas) - .logtime(DateUtil.parseDateTime(dataTime)) - .build());//存储采集数据 - //2.有无超限处理流程(判断最后一条数据) -// if (i < jsonArray.size() - 1) continue; - - //3.清除设备告警 - alarmRecordsService.cancelDeviceAlarm(devCode); - //4.存报警 - //若没绑场站,则不产生报警 - boolean alarmFlag = false; - String bfcf = busDeviceService.getBfcf(devCode); - 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))) { - dataTime = dataTime.replaceAll("-", ""); - dataTime = dataTime.replaceAll(":", ""); - dataTime = dataTime.replaceAll("\\s+", ""); - alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); - } - break; - } - } - } - //5.清数据报警 - if (!alarmFlag) { - alarmRecordsService.cancelDataAlarm(devCode); - } - //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); - //7.更新监测井状态 (1:正常,2:报警) - if (busWellDTOList != null && busWellDTOList.size() > 0) { - alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); - } - } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + JsonFactory factory = new JsonFactory(); + try (JsonParser parser = factory.createParser(jsonObject.getString("data"))) { + // 定位到 "data" 数组 + while (parser.nextToken() != JsonToken.START_ARRAY) { + parser.nextToken(); } + // 逐条处理数据 + while (parser.nextToken() != JsonToken.END_ARRAY) { + if (parser.getCurrentToken() == JsonToken.START_OBJECT) { + processSingleData(parseJsonObject(parser)); + } + + } + } catch (IOException e) { + e.printStackTrace(); } + return true; } + private PanDataDTO parseJsonObject(JsonParser parser) throws IOException { + PanDataDTO panDataDTO = new PanDataDTO(); + while (parser.nextToken() != JsonToken.END_OBJECT) { + String fieldName = parser.getCurrentName(); + if ("dataTime".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataTime(parser.getText()); + } else if ("attributeType".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setAttributeType(parser.getText()); + } else if ("dataValue".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataValue(parser.getText()); + } else if ("deviceCode".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDeviceCode(parser.getText()); + } + } + return panDataDTO; + } + + + private void processSingleData(PanDataDTO panDataDTO) { + try { + String devCode = panDataDTO.getDeviceCode(); + if (ObjectUtil.isEmpty(devCode)) return; + List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); + String gas = panDataDTO.getDataValue(); + String attributeType = panDataDTO.getAttributeType(); + //暂只存浓度 + if ("2".equals(attributeType)) return; + String dataTime = panDataDTO.getDataTime(); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataPanGas.builder() + .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .deviceCode(devCode) + .concentration(gas) + .logtime(DateUtil.parseDateTime(dataTime)) + .build());//存储采集数据 + + boolean alarmFlag = false; + String bfcf = busDeviceService.getBfcf(devCode); + 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))) { +// dataTime = dataTime.replaceAll("-", ""); +// dataTime = dataTime.replaceAll(":", ""); +// dataTime = dataTime.replaceAll("\\s+", ""); + alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); + //7.更新监测井状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + log.error("处理云台数据时发生异常,devcode:{},data:{},e:{}", panDataDTO.getDeviceCode(), panDataDTO.toString(), e); + } + } + + +// @Transactional +// @Override +// public boolean processAcceptGasData(Map dataParams) { +// JSONObject jsonObject = new JSONObject(dataParams); +// JSONArray jsonArray = jsonObject.getJSONArray("data"); +// String devCode = ""; +// for (int i = 0; i < jsonArray.size(); i++) { +// try { +// devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); +// if (ObjectUtil.isEmpty(devCode)) continue; +// List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); +// String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); +// String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); +// //暂只存浓度 +// if ("2".equals(attributeType)) continue; +// String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); +// gas = String.format("%.2f", Double.valueOf(gas)); +// //1.存数据 +// save(DataPanGas.builder() +// .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") +// .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") +// .deviceCode(devCode) +// .concentration(gas) +// .logtime(DateUtil.parseDateTime(dataTime)) +// .build());//存储采集数据 +// //2.有无超限处理流程(判断最后一条数据) +//// if (i < jsonArray.size() - 1) continue; +// +// //3.清除设备告警 +//// alarmRecordsService.cancelDeviceAlarm(devCode); +// //4.存报警 +// //若没绑场站,则不产生报警 +// boolean alarmFlag = false; +// String bfcf = busDeviceService.getBfcf(devCode); +// 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))) { +//// dataTime = dataTime.replaceAll("-", ""); +//// dataTime = dataTime.replaceAll(":", ""); +//// dataTime = dataTime.replaceAll("\\s+", ""); +// alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); +// } +// break; +// } +// } +// } +// //5.清数据报警 +// if (!alarmFlag) { +// alarmRecordsService.cancelDataAlarm(devCode); +// } +// //6.更新电量及状态 (1:正常,2:报警) +// alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); +// //7.更新监测井状态 (1:正常,2:报警) +// if (busWellDTOList != null && busWellDTOList.size() > 0) { +// alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); +// } +// } catch (Exception e) { +// log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); +// } +// } +// return true; +// } + @Override public boolean acceptAlarmData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); 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 37d731d..a17953b 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataTubeOtherServiceImpl extends ServiceImpl implements IDataTubeOtherService, IDataAbstractService { @@ -73,7 +75,7 @@ } } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,7 +84,7 @@ imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -122,8 +124,8 @@ } //特殊处理消警 if ("CancelWaterImmersionAlarm".equals(alarmType)) { - if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { - alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + if (alarmRecordsService.isWatchAlarms(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelWatchAlarms(devCode, "WaterImmersionAlarm"); } continue; } @@ -146,8 +148,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmType)); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -227,8 +228,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java new file mode 100644 index 0000000..3be65dd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java @@ -0,0 +1,170 @@ +package com.casic.missiles.modular.aop; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.aop.annotion.ReflectionUtils; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.modular.interfaces.log.LogManager; +import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.Serializable; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Aspect +@Component +public class OperateLogAspect { + private Logger log = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private ApplicationContext applicationContext; + + public static volatile Map oldMap = new HashMap<>(); + + public OperateLogAspect() { + } + + @Pointcut("@annotation(com.casic.missiles.modular.aop.annotion.OperateLog)") + public void cutService() { + } + + @Around("cutService()") + public Object recordSysLog(ProceedingJoinPoint point) throws Throwable { + Object result = point.proceed(); + + try { + this.handle(point); + } catch (Exception var4) { + this.log.error("日志记录出错!", var4); + } + + return result; + } + + /** + * 处理请求前执行 + */ + @Before(value = "@annotation(operateLog)") + public void boBefore(JoinPoint joinPoint, OperateLog operateLog) { + Object info = joinPoint.getArgs()[0]; + if ("edit".equals(operateLog.type()) && operateLog.needDefaultCompare()) { + Class cls = operateLog.serviceClass(); + IService service = (IService) applicationContext.getBean(cls); + Object result; + if (service instanceof IBusDeviceService) { + result = ((IBusDeviceService) service).getByDeviceId((Long) ReflectionUtils.getFieldValue(info, "id")); + } else + result = service.getById((Serializable) ReflectionUtils.getFieldValue(info, "id")); + oldMap = (Map) objectToMap(result); // 存储修改前的对象 + } + } + + private void handle(ProceedingJoinPoint point) throws Exception { + Signature sig = point.getSignature(); + MethodSignature msig = null; + if (!(sig instanceof MethodSignature)) { + throw new IllegalArgumentException("该注解只能用于方法"); + } else { + msig = (MethodSignature) sig; + Object target = point.getTarget(); + Method currentMethod = target.getClass().getMethod(msig.getName(), msig.getParameterTypes()); + String methodName = currentMethod.getName(); + AuthUser user = ShiroKit.getUser(); + if (null != user) { + String className = point.getTarget().getClass().getName(); + Object[] params = point.getArgs(); + OperateLog annotation = (OperateLog) currentMethod.getAnnotation(OperateLog.class); + String bussinessName = annotation.value(); + String key = annotation.key(); + Class dictClass = annotation.dict(); + String sb = argsArrayToString(params); + String msg = sb; + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + if ("add".equals(annotation.type())) { + Map parameters = (Map) objectToMap(params[0]); + msg = CollectionUtils.isEmpty(parameters) ? sb : ReflectionUtils.parseMutiKey(dictMap, key, parameters); + } else if ("edit".equals(annotation.type())) { + msg = CollectionUtils.isEmpty(oldMap) ? sb : ReflectionUtils.contrastObj(dictClass, key, params[0], oldMap); + }else if("delete".equals(annotation.type())){ + msg=dictMap.get(annotation.key())+":"+ReflectionUtils.getDeleteKeys(params[0]); + } + LogManager.me().executeLog(LogTaskFactory.bussinessLog(user.getId(), bussinessName, className, methodName, msg)); + } + } + } + + + /** + * 参数拼装 + */ + private String argsArrayToString(Object[] paramsArray) { + Gson gson = new GsonBuilder().create(); + String params = ""; + if (paramsArray != null && paramsArray.length > 0) { + for (int i = 0; i < paramsArray.length; i++) { + if (!isFilterObject(paramsArray[i])) { + params += gson.toJson(paramsArray[i]) + " & "; + } + } + } + return params.trim(); + } + + + /** + * 判断是否需要过滤的对象。 + * + * @param o 对象信息。 + * @return 如果是需要过滤的对象,则返回true;否则返回false。 + */ + public boolean isFilterObject(final Object o) { + return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse; + } + + private Map objectToMap(Object obj) { + if (obj == null) { + return null; + } + ObjectMapper mapper = new ObjectMapper(); + mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + // 如果使用JPA请自己打开这条配置 + // mapper.addMixIn(Object.class, IgnoreHibernatePropertiesInJackson.class); + Map mappedObject = mapper.convertValue(obj, Map.class); + return mappedObject; + + + } +} + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java new file mode 100644 index 0000000..77afa9c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.aop.annotion; + +import java.lang.annotation.*; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.FIELD}) +@Documented +public @interface DataName { + String name() default ""; // 字段名称 + + /** + * 读取枚举内容转义表达式 (如: 0=男,1=女,2=未知) + */ + String readConverterExp() default ""; +} + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java new file mode 100644 index 0000000..f1f59ad --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.aop.annotion; + + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.common.constant.dictmap.base.SystemDict; + +import java.lang.annotation.*; + +@Inherited +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.METHOD}) +public @interface OperateLog { + String value() default ""; + + String key() default "id"; + + Class serviceClass() default IService.class; + + // 是否需要比较新旧数据 + boolean needDefaultCompare() default true; + + //操作类型 add update delete + String type() default "update"; + + Class dict() default SystemDict.class; +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java new file mode 100644 index 0000000..eb773ad --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java @@ -0,0 +1,328 @@ +package com.casic.missiles.modular.aop.annotion; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.modular.interfaces.dictmap.factory.DictFieldWrapperFactory; +import lombok.extern.slf4j.Slf4j; + +import java.beans.PropertyDescriptor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.*; + +import static com.casic.missiles.modular.interfaces.utils.Contrast.firstCharToLowerCase; +import static com.casic.missiles.modular.interfaces.utils.Contrast.firstCharToUpperCase; + +@Slf4j +public class ReflectionUtils { + + /** + * 直接读取对象属性值, 无视private/protected修饰符, 不经过getter函数. + * + * @param obj 读取的对象 + * @param fieldName 读取的列 + * @return 属性值 + */ + public static Object getFieldValue(final Object obj, final String fieldName) { + Field field = getAccessibleField(obj, fieldName); + if (field == null) { + throw new IllegalArgumentException("Could not find field [" + fieldName + "] on target [" + obj + "]"); + } + + Object result = null; + try { + result = field.get(obj); + } catch (IllegalAccessException e) { + log.error("不可能抛出的异常{}", e.getMessage()); + e.printStackTrace(); + } + return result; + } + + /** + * 循环向上转型, 获取对象的DeclaredField, 并强制设置为可访问.如向上转型到Object仍无法找到, 返回null. + * + * @param obj 查找的对象 + * @param fieldName 列名 + * @return 列 + */ + public static Field getAccessibleField(final Object obj, final String fieldName) { + for (Class superClass = obj.getClass(); superClass != Object.class; superClass = superClass.getSuperclass()) { + try { + Field field = superClass.getDeclaredField(fieldName); + makeAccessible(field); + return field; + } catch (NoSuchFieldException e) { // NOSONAR + // Field不在当前类定义,继续向上转型 + e.printStackTrace(); + continue; // new add + } + } + return null; + } + + /** + * 改变private/protected的成员变量为public,尽量不调用实际改动的语句,避免JDK的SecurityManager抱怨。 + * + * @param + */ + public static void makeAccessible(Field field) { + if ((!Modifier.isPublic(field.getModifiers()) || !Modifier.isPublic(field.getDeclaringClass().getModifiers()) || Modifier + .isFinal(field.getModifiers())) && !field.isAccessible()) { + field.setAccessible(true); + } + } + + /** + * 获取两个对象同名属性内容不相同的列表 + * + * @param class1 old对象 + * @param class2 new对象 + * @return 区别列表 + * @throws ClassNotFoundException 异常 + * @throws IllegalAccessException 异常 + */ + public static List> compareTwoClass(Object class1, Object class2) throws ClassNotFoundException, IllegalAccessException { + List> list = new ArrayList>(); + // 获取对象的class + Class clazz1 = class1.getClass(); + Class clazz2 = class2.getClass(); + // 获取对象的属性列表 + Field[] field1 = clazz1.getDeclaredFields(); + Field[] field2 = clazz2.getDeclaredFields(); + StringBuilder sb = new StringBuilder(); + // 遍历属性列表field1 + for (int i = 0; i < field1.length; i++) { + // 遍历属性列表field2 + for (int j = 0; j < field2.length; j++) { + // 如果field1[i]属性名与field2[j]属性名内容相同 + if (field1[i].getName().equals(field2[j].getName())) { + if (field1[i].getName().equals(field2[j].getName())) { + field1[i].setAccessible(true); + field2[j].setAccessible(true); + // 如果field1[i]属性值与field2[j]属性值内容不相同 + if (!compareTwo(field1[i].get(class1), field2[j].get(class2))) { + Map map2 = new HashMap(); + DataName name = field1[i].getAnnotation(DataName.class); + String fieldName = ""; + if (name != null) { + fieldName = name.name(); + } else { + fieldName = field1[i].getName(); + } + map2.put("name", fieldName); + map2.put("old", field1[i].get(class1)); + map2.put("new", field2[j].get(class2)); + list.add(map2); + } + break; + } + } + } + } + return list; + } + + /** + * 对比两个数据是否内容相同 + * + * @param object1 比较对象1 + * @param object2 比较对象2 + * @return boolean类型 + */ + public static boolean compareTwo(Object object1, Object object2) { + if (object1 == null && object2 == null) { + return true; + } + if (object1 == null && object2 != null) { + return false; + } + if (object1.equals(object2)) { + return true; + } + return false; + } + + public static String contrastObjByName(Class dictClass, String key, Object pojo1, Map pojo2) throws IllegalAccessException, InstantiationException { + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + String str = parseMutiKey(dictMap, key, pojo2) + ";;;"; + + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if (!"serialVersionUID".equals(field.getName())) { + String prefix = "get"; + int prefixLength = 3; + if (field.getType().getName().equals("java.lang.Boolean")) { + prefix = "is"; + prefixLength = 2; + } + + Method getMethod = null; + + try { + getMethod = clazz.getDeclaredMethod(prefix + firstCharToUpperCase(field.getName())); + } catch (NoSuchMethodException var22) { + System.err.println("this className:" + clazz.getName() + " is not methodName: " + var22.getMessage()); + continue; + } + + Object o1 = getMethod.invoke(pojo1); + Object o2 = pojo2.get(firstCharToLowerCase(getMethod.getName().substring(prefixLength))); + if (o1 != null && o2 != null) { + if (o1 instanceof Date) { + o1 = DateUtil.format(new Date(), "yyyy-MM-dd"); + } else if (o1 instanceof Integer) { + o2 = Integer.parseInt(o2.toString()); + } + + if (!o1.toString().equals(o2.toString())) { + if (i != 1) { + str = str + ";;;"; + } + + String fieldName = dictMap.get(field.getName()); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(field.getName()); + if (fieldWarpperMethodName != null) { + Object o1Warpper = DictFieldWrapperFactory.createFieldWrapper(o1, fieldWarpperMethodName); + Object o2Warpper = DictFieldWrapperFactory.createFieldWrapper(o2, fieldWarpperMethodName); + str = str + "字段名称:" + fieldName + ",旧值:" + o1Warpper + ",新值:" + o2Warpper; + } else { + str = str + "字段名称:" + fieldName + ",旧值:" + o1 + ",新值:" + o2; + } + + ++i; + } + } + } + } + } catch (Exception var23) { + var23.printStackTrace(); + } + + return str; + } + + public static String parseMutiKey(AbstractDictMap dictMap, String key, Map requests) { + StringBuilder sb = new StringBuilder(); + if (key.indexOf(",") != -1) { + String[] keys = key.split(","); + String[] var13 = keys; + int var14 = keys.length; + + for (int var7 = 0; var7 < var14; ++var7) { + String item = var13[var7].trim(); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(item); + Object value = requests.get(item); + if (fieldWarpperMethodName != null) { + Object valueWarpper = DictFieldWrapperFactory.createFieldWrapper(value, fieldWarpperMethodName); + sb.append(dictMap.get(item) + "=" + valueWarpper + ","); + } else { + sb.append(dictMap.get(item) + "=" + (ObjectUtil.isNotEmpty(value) ? value.toString() : "") + ","); + } + } + + return StrUtil.removeSuffix(sb.toString(), ","); + } else { + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(key); + Object value = requests.get(key); + if (fieldWarpperMethodName != null) { + Object valueWarpper = DictFieldWrapperFactory.createFieldWrapper(value, fieldWarpperMethodName); + sb.append(dictMap.get(key) + "=" + valueWarpper); + } else { + sb.append(dictMap.get(key) + "=" + (ObjectUtil.isNotEmpty(value) ? value.toString() : "")); + } + + return sb.toString(); + } + } + + public static String getDeleteKeys(Object pojo1) { + String str = ""; + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if ("keys".equals(field.getName())) { + PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); + Method getMethod = pd.getReadMethod(); + Object o1 = getMethod.invoke(pojo1); + return ObjectUtil.isNotEmpty(o1) ? o1.toString().replaceAll("\\[|]", "") : "".concat(",已删除"); + } + } + + } catch (Exception var21) { + var21.printStackTrace(); + } + return str; + } + + public static String contrastObj(Class dictClass, String key, Object pojo1, Map pojo2) throws IllegalAccessException, InstantiationException { + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); +// String str = parseMutiKey(dictMap, key, pojo2) + ";;;"; + String str = ""; + + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if (!"serialVersionUID".equals(field.getName())) { + PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); + Method getMethod = pd.getReadMethod(); + Object o1 = getMethod.invoke(pojo1); + Object o2 = pojo2.get(firstCharToLowerCase(getMethod.getName().substring(3))); + if (o1 != null && o2 != null) { + if (o1 instanceof Integer) { + o2 = Integer.parseInt(o2.toString()); + } else if (o1 instanceof Date) { + o1 = DateUtil.format((Date) o1, "yyyy-MM-dd HH:mm:ss"); + } + + if (!o1.toString().equals(o2.toString())) { + if (i != 1) { + str = str + ";"; + } + + String fieldName = dictMap.get(field.getName()); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(field.getName()); + if (fieldWarpperMethodName != null) { + Object o1Warpper = DictFieldWrapperFactory.createFieldWrapper(o1, fieldWarpperMethodName); + Object o2Warpper = DictFieldWrapperFactory.createFieldWrapper(o2, fieldWarpperMethodName); + str = str + fieldName + ":将【" + o1Warpper + "】,改为【" + o2Warpper + "】"; + } else { + str = str + fieldName + ":将【" + o1 + "】,改为【" + o2 + "】"; + } + + ++i; + } + } + } + } + } catch (Exception var21) { + var21.printStackTrace(); + } + + return str; + } + + +} \ No newline at end of file diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java index 7497ebf..18fd820 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java @@ -8,12 +8,14 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.StateDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.DeviceTypeDict; import com.casic.missiles.modular.device.dto.BaseDeviceTypeDTO; import com.casic.missiles.modular.device.dto.BaseDeviceTypeIdsDTO; import com.casic.missiles.modular.device.dto.SelectDTO; @@ -63,6 +65,7 @@ return ReturnUtil.success(super.packForBT(baseDeviceTypePage)); } + @OperateLog(value = "新增设备类型", key = "typeName,watchObject,isUsed,typeDescription", dict = DeviceTypeDict.class, type = "add") @ApiOperation("增加设备类型") @PostMapping("/add") @ResponseBody @@ -71,6 +74,7 @@ return ReturnUtil.success(iBaseDeviceTypeService.saveBaseDeviceType(baseDeviceType)); } + @OperateLog(value = "编辑设备类型", dict = DeviceTypeDict.class, serviceClass = IBaseDeviceTypeService.class, type = "edit") @ApiOperation("编辑设备类型") @PostMapping("/edit") @ResponseBody @@ -81,10 +85,11 @@ return ReturnUtil.success(iBaseDeviceTypeService.updateById(baseDeviceType)); } + @OperateLog(value = "删除设备类型", key = "typeName", dict = DeviceTypeDict.class, serviceClass = IBaseDeviceTypeService.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); @@ -113,7 +118,7 @@ public ReturnDTO selectList(@RequestBody BaseDeviceTypeIdsDTO request) { QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.in(request.getDeviceTypeList()!=null&&request.getDeviceTypeList().size()>0, "id", request.getDeviceTypeList()); + queryWrapper.in(request.getDeviceTypeList() != null && request.getDeviceTypeList().size() > 0, "id", request.getDeviceTypeList()); queryWrapper.eq("IS_USED", "1"); List baseDeviceTypes = iBaseDeviceTypeService.list(queryWrapper); List selectDTOS = new ArrayList<>(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java index 42d752d..54944e2 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java @@ -3,14 +3,15 @@ import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.IdDTO; -import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.ProductDict; import com.casic.missiles.modular.device.dto.BaseProductDTO; import com.casic.missiles.modular.device.dto.SelectProductDTO; import com.casic.missiles.modular.device.entity.BaseProduct; @@ -21,7 +22,6 @@ import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; -import java.util.List; import java.util.Objects; /** @@ -49,6 +49,7 @@ return ReturnUtil.success(super.packForBT(iBaseProductService.pageList(page, requestDTO))); } + @OperateLog(value = "新增产品", key = "productName,deviceType,deviceModel,manufacturerId,protocol,accessMethod,powerSupplyMode,dataService", dict = ProductDict.class, type = "add") @ApiOperation("新增") @PostMapping("/add") @ResponseBody @@ -58,6 +59,7 @@ } + @OperateLog(value = "编辑产品", dict = ProductDict.class, serviceClass = IBaseProductService.class, type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -68,10 +70,11 @@ return ReturnUtil.success(iBaseProductService.updateBaseProductById(baseProduct)); } + @OperateLog(value = "删除产品", key = "productName", dict = ProductDict.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 509bd7b..103acf2 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 @@ -9,6 +9,7 @@ import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; @@ -17,6 +18,7 @@ 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.aop.annotion.OperateLog; import com.casic.missiles.modular.device.dict.BusConfigDict; import com.casic.missiles.modular.device.dict.DeviceDict; import com.casic.missiles.modular.device.dto.*; @@ -65,7 +67,8 @@ } - @BussinessLog(value = "新增设备", key = "devcode,deviceName,deviceType,installDate,productId", dict = DeviceDict.class) + @OperateLog(value = "新增设备", key = "devcode,deviceType,productId," + + "valid,communicationType,simId,warrantyPeriod,tagNumber,leftLength,rightLength,", dict = DeviceDict.class,type = "add") @CacheEvict(value="busLedgersCache", key="#busDevice.getDevcode()") @ApiOperation("新增") @PostMapping("/add") @@ -75,7 +78,8 @@ } - @BussinessLog(value = "编辑设备", key = "devcode,deviceName,deviceType,installDate,productId", dict = DeviceDict.class) + @OperateLog(value = "编辑设备", key = "devcode,deviceType,installDate,productId," + + "leftLength,rightLength,communicationType,simId,warrantyPeriod", dict = DeviceDict.class,serviceClass = IBusDeviceService.class,type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -86,11 +90,12 @@ return ReturnUtil.success(iBusDeviceService.updateBusDevice(busDevice)); } + @OperateLog(value = "删除设备", key = "devcode", dict = DeviceDict.class,serviceClass = IBusDeviceService.class,type = "delete") @CacheEvict(value="busLedgersCache", allEntries = true) @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 31de56e..6f35acd 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 @@ -4,8 +4,8 @@ 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.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.page.PageFactory; @@ -16,11 +16,8 @@ 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.BusDeviceDTO; -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.BusDevice; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.CommonUtil; @@ -53,6 +50,7 @@ private final IBusLedgerPipeService iBusLedgerPipeService; private final IBaseExportService iBaseExportService; + private final AbstractDictService abstractDictService; @ApiOperation("新建点位") @PostMapping("/addPosition") @@ -60,10 +58,10 @@ 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,"安装位号已存!!!"); + if (busLedgerPipeList != null && busLedgerPipeList.size() > 0) { + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE, "安装位号已存!!!"); } - Long id =IdUtil.getSnowflake(1,2).nextId(); + Long id = IdUtil.getSnowflake(1, 2).nextId(); busLedgerPipe.setId(id); busLedgerPipe.setLedgerCode(busLedgerPipe.getTagNumber()); busLedgerPipe.setArea(CommonUtil.getAreaCode(busLedgerPipe.getPosition())); @@ -139,7 +137,11 @@ page.setCurrent(1); page.setSize(Integer.MAX_VALUE); Page devicePage = iBusLedgerPipeService.listPage(page, busLedgerPipeRequestDTO); + List records = devicePage.getRecords(); try { + for (BusLedgerPipe busLedgerPipe : records) { + busLedgerPipe.setLocationCategory(abstractDictService.getDictNameByCode("locationType", busLedgerPipe.getLocationCategory())); + } iBaseExportService.exportExcel(response, BusLedgerPipe.class, devicePage.getRecords(), ExportEnum.LEDGER_PIPE_EXPORT.getSheetName()); } catch (Exception e) { e.printStackTrace(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java index e87f3f8..8040c74 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java @@ -7,10 +7,13 @@ 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.DeletesDTO; import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.ProtocolDict; import com.casic.missiles.modular.device.dto.BusProtocolDTO; import com.casic.missiles.modular.device.entity.BusProtocol; import com.casic.missiles.modular.device.service.IBusProtocolService; @@ -35,10 +38,10 @@ @RestController @RequestMapping("/system/busProtocol") public class BusProtocolController extends ExportController { - + private final IBusProtocolService protocolService; - + @ApiOperation("查询分页接口") @PostMapping("/listPage") @ResponseBody @@ -47,9 +50,10 @@ queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getProtocolName()), "PROTOCOL_NAME", requestDTO.getProtocolName()); queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getProtocolCode()), "PROTOCOL_CODE", requestDTO.getProtocolCode()); Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(protocolService.page(page,queryWrapper))); + return ReturnUtil.success(super.packForBT(protocolService.page(page, queryWrapper))); } + @OperateLog(value = "新增协议", key = "protocolName,protocolCode,version,ip,description", dict = ProtocolDict.class, type = "add") @ApiOperation("新增") @PostMapping("/add") @ResponseBody @@ -58,6 +62,7 @@ return ReturnUtil.success(protocolService.save(busProtocol)); } + @OperateLog(value = "编辑协议", dict = ProtocolDict.class, serviceClass = IBusProtocolService.class, type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -68,10 +73,11 @@ return ReturnUtil.success(protocolService.updateById(busProtocol)); } + @OperateLog(value = "删除协议", key = "protocolName", dict = ProtocolDict.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 23ddee9..24c4712 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 @@ -2,7 +2,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.entity.BusDevice; import com.casic.missiles.util.InConditionDriver; @@ -46,27 +45,27 @@ @Param("orderColumn") String orderColumn, @Param("request") CommonRequestDTO request); - @Select("SELECT BFZT from bus_device where VALID=1 and DEVCODE= #{devcode} limit 1" ) - String getBfcf( @Param("devcode") String devcode); + @Select("SELECT BFZT from bus_device where VALID=1 and DEVCODE= #{devcode} limit 1") + String getBfcf(@Param("devcode") String devcode); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getMethaneData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getMethaneData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_tube_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getTubeOtherData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_tube_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getTubeOtherData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gasliquid_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getLGData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gasliquid_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getLGData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_monitor_pipe_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getMonitorPipeOtherData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_monitor_pipe_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getMonitorPipeOtherData(@Param("devcodes") List devcodes); - @Select("SELECT ALARM_THRESHOLD FROM `alarm_rule_device` where DEVCODE = #{devcode} order by ALARM_THRESHOLD asc " ) + @Select("SELECT ALARM_THRESHOLD FROM `alarm_rule_device` where DEVCODE = #{devcode} order by ALARM_THRESHOLD asc ") List getSpecialDeviceRule(@Param("devcode") String devcode); @Select(" select ar.ALARM_THRESHOLD from alarm_rule ar where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + @@ -81,4 +80,7 @@ "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") List getListByWellId(@Param("wellId") Long wellId); + + BusDeviceOperateLogDTO getByDeviceId(@Param("id") Long id); + } 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 8ba4b15..3109344 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 @@ -44,7 +44,7 @@ LEFT JOIN base_product bp ON bd.PRODUCT_ID = bp.ID LEFT JOIN bus_device_ledger br on br.DEVICE_ID = bd.ID AND br.VALID='1' LEFT JOIN bus_manufacturer bm on bm.ID = bp.MANUFACTURER_ID - LEFT JOIN bus_ledger_all_view bl on bl.ID = br.LEDGER_ID AND br.VALID='1' and bl.type = br.type + LEFT JOIN bus_ledger_all_view bl on bl.ID = br.LEDGER_ID AND bl.VALID='1' and bl.type = br.type where bd.valid>0 @@ -95,6 +95,32 @@ + + + SELECT - rd.*, - at.alarm_type, - bt.TYPE_NAME as devTypeName - FROM - alarm_records rd - LEFT JOIN bus_ledger_all_view lr ON lr.ledgerCode = rd.LEDGER_CODE - LEFT JOIN alarm_type at ON at.ID = rd.ALARM_TYPE_ID - LEFT JOIN bus_device bd ON bd.DEVCODE = rd.DEVCODE and bd.valid >0 - LEFT JOIN base_device_type bt ON bt.id = bd.DEVICE_TYPE + rd.*, + AT.alarm_type, + bt.TYPE_NAME AS devTypeName + FROM + alarm_records rd + LEFT JOIN bus_device bd ON bd.DEVCODE = rd.DEVCODE + AND bd.valid > 0 + LEFT JOIN bus_device_ledger bl ON bd.ID = bl.DEVICE_ID + AND bl.VALID = '1' + 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' + AND lr.ledgerCode = rd.LEDGER_CODE + LEFT JOIN alarm_type AT ON AT.ID = rd.ALARM_TYPE_ID + LEFT JOIN base_device_type bt ON bt.id = bd.DEVICE_TYPE where rd.STATUS ='1' and rd.EXCEPTION_TYPE='0' @@ -695,6 +705,7 @@ dt.LOGTIME, bv.tagNumber, bv.ledgerCode, + bv.ledgerName, bdt.TYPE_NAME, bv.place, bv.type, @@ -720,6 +731,7 @@ t.tagNumber, t.ledgerCode, t.TYPE_NAME, + t.ledgerName, t.OFF_DAYS, t.LOGTIME, t.place, diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml index 7aff0f0..a63dac1 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml @@ -25,34 +25,55 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java index 3e0edd6..9dab3a7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java @@ -71,4 +71,18 @@ private Long deptid; + @ApiModelProperty("经度") + private String lngGaode; + + @ApiModelProperty("纬度") + private String latGaode; + + @ApiModelProperty("监测类型") + private String watchObject; + + @ApiModelProperty("点位id") + private Long ledgerId; + + + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java index e938da8..60464c4 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java @@ -12,6 +12,7 @@ private String deviceType; private String tagNumber; private String ledgerCode; + private String ledgerName; private String place; //台账类型 private String type; 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 ac4cabe..e623df7 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 @@ -44,6 +44,7 @@ import static cn.hutool.core.date.DateUnit.DAY; import static com.casic.missiles.util.TimeConvertUtil.TimeConverter; +import static com.casic.missiles.util.TimeConvertUtil.TimeConverterSecond; /** *

@@ -180,8 +181,8 @@ public DeviceAlarmDetailDTO deviceAlarmDetail(Long id) { DeviceAlarmDetailDTO alarmDetail = this.baseMapper.deviceAlarmDetail(id); - alarmDetail.setCancelDuration(TimeConverter(alarmDetail.getCancelDuration())); - alarmDetail.setProcessDuration(TimeConverter(alarmDetail.getProcessDuration())); + alarmDetail.setCancelDuration(TimeConverterSecond(alarmDetail.getCancelDuration())); + alarmDetail.setProcessDuration(TimeConverterSecond(alarmDetail.getProcessDuration())); alarmDetail.setDeptName(ObjectUtil.isNotEmpty(alarmDetail.getDeptid()) ? commonServer.getDeptNamesByDeptId(alarmDetail.getDeptid()) : ""); // alarmDetail.setAddress(alarmDetail.getTagNumber().concat("|").concat(alarmDetail.getLedgerName())); alarmDetail.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmDetail.getAlarmCategory())); @@ -524,16 +525,26 @@ @Override public void cancelDeviceAlarm(String devCode) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("DEVCODE", devCode); - updateWrapper.eq("EXCEPTION_TYPE", "1"); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE", devCode); + queryWrapper.eq("EXCEPTION_TYPE", "1"); //只有挂起和已处置的才消 // updateWrapper.ge("PROCESS_STATUS", "3"); - updateWrapper.eq("STATUS", "1"); - updateWrapper.set("STATUS", "0"); - updateWrapper.set("CANCEL_TIME", new Date()); - this.update(updateWrapper); - //toDo:需要加流程取消日志 + queryWrapper.eq("STATUS", "1"); + List alarmRecordsList = this.list(queryWrapper); + if (alarmRecordsList != null && alarmRecordsList.size() > 0) { + alarmRecordsList.forEach(alarmRecords -> { + alarmRecords.setStatus("0"); + alarmRecords.setCancelTime(new Date()); + alarmRecords.setPreProcessStatus(alarmRecords.getProcessStatus()); + alarmRecords.setProcessStatus(ApprovalStatusEnum.FINISHED.getCode()); + this.updateById(alarmRecords); + }); + //添加流程日志 + approvalLogMapper.insert(new ApprovalLog(alarmRecordsList.get(0).getId(), "1", + "", ApprovalStatusEnum.FINISHED.getCode(), + null)); + } } @Override @@ -674,8 +685,12 @@ AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), data.concat("%LEL"), data, - alarmRuleResponseDTO.getAlarmLevelId(),DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmLevelId(), DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmRuleResponseDTO.getAlarmTypeName(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -721,7 +736,7 @@ @Override - public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime,List busWellDTOList, + public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime, List busWellDTOList, Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { @@ -730,8 +745,12 @@ try { AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, - alarmLevelId, DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmLevelId, DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmTypeName, + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace() + , "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -793,7 +812,11 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.get().getAlarmTypeId(), alarmRuleResponseDTO.get().getAlarmTypeName(), alarmRuleResponseDTO.get().getAlarmLevelId(), DateUtil.parse(logTime), - alarmRuleResponseDTO.get().getAlarmThreshold(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "1"); + alarmRuleResponseDTO.get().getAlarmThreshold(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "1"); this.save(alarmRecords); } catch (Exception e) { e.printStackTrace(); @@ -846,8 +869,8 @@ * @param cell */ @Override - public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent,String logTime) { - this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent,DateUtil.parse(logTime)); + public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent, String logTime) { + this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent, DateUtil.parse(logTime)); } @Override @@ -903,7 +926,10 @@ offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), - offDeviceDTO.getPlace(), "1"); + ObjectUtil.isNotEmpty(offDeviceDTO.getLedgerName()) ? + offDeviceDTO.getTagNumber().concat("|"). + concat(offDeviceDTO.getLedgerName()) : + offDeviceDTO.getPlace(), "1"); alarmRecordsList.add(alarmRecords); ledgers.add(offDeviceDTO); } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java new file mode 100644 index 0000000..cb554b9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.data.dto; + + +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class PanDataDTO implements Serializable { + + private static final long serialVersionUID = 1232822221212L; + + private String dataTime; + + private String attributeType; + + private String dataValue; + + private String deviceCode; + + + +} 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 index a082d00..2a943ad 100644 --- 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 @@ -23,6 +23,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -37,6 +38,7 @@ * @author zt * @since 2025-01-22 */ +@Slf4j @RequiredArgsConstructor @Service public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { @@ -71,8 +73,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -80,8 +81,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}",devCode, e); } } @@ -141,8 +141,7 @@ } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -222,8 +221,10 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); +// e.printStackTrace(); +// log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); + } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java index dd80611..cd24860 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java @@ -83,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -124,8 +123,7 @@ busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -200,8 +198,7 @@ alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } //低电量报警处理 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 302b446..f0def39 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 @@ -76,8 +76,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -85,8 +84,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -133,8 +131,7 @@ if (i < jsonArray.size() - 1) continue; busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -217,8 +214,7 @@ } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } 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 e5ba8f7..a02af88 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataMonitorPipeOtherServiceImpl extends ServiceImpl implements IDataMonitorPipeOtherService, IDataAbstractService { @@ -73,8 +75,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -116,8 +116,7 @@ //2.写入新的报警 alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + log.error("处理报警时发生异常,devcode:{},e:{}", devCode, e); } } } @@ -160,8 +159,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmEventCode)); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -341,8 +339,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag || ObjectUtil.isNotEmpty(alarmContent) ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java index 5dc8c2b..f383690 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java @@ -2,7 +2,6 @@ import cn.hutool.core.date.DateUtil; 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; @@ -13,15 +12,20 @@ import com.casic.missiles.modular.alarm.service.IAlarmRuleService; import com.casic.missiles.modular.data.dao.DataGasMapper; import com.casic.missiles.modular.data.dao.DataPanGasMapper; +import com.casic.missiles.modular.data.dto.PanDataDTO; import com.casic.missiles.modular.data.entity.DataPanGas; import com.casic.missiles.modular.data.service.IDataPanGasService; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.CommonUtil; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonToken; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.io.IOException; import java.util.Date; import java.util.List; import java.util.Map; @@ -68,78 +72,179 @@ } - @Transactional @Override public boolean processAcceptGasData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); - JSONArray jsonArray = jsonObject.getJSONArray("data"); - String devCode = ""; - for (int i = 0; i < jsonArray.size(); i++) { - try { - devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); - if (ObjectUtil.isEmpty(devCode)) continue; - List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); - String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); - String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); - //暂只存浓度 - if ("2".equals(attributeType)) continue; - String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); - gas = String.format("%.2f", Double.valueOf(gas)); - //1.存数据 - save(DataPanGas.builder() - .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") - .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") - .deviceCode(devCode) - .concentration(gas) - .logtime(DateUtil.parseDateTime(dataTime)) - .build());//存储采集数据 - //2.有无超限处理流程(判断最后一条数据) -// if (i < jsonArray.size() - 1) continue; - - //3.清除设备告警 - alarmRecordsService.cancelDeviceAlarm(devCode); - //4.存报警 - //若没绑场站,则不产生报警 - boolean alarmFlag = false; - String bfcf = busDeviceService.getBfcf(devCode); - 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))) { - dataTime = dataTime.replaceAll("-", ""); - dataTime = dataTime.replaceAll(":", ""); - dataTime = dataTime.replaceAll("\\s+", ""); - alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); - } - break; - } - } - } - //5.清数据报警 - if (!alarmFlag) { - alarmRecordsService.cancelDataAlarm(devCode); - } - //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); - //7.更新监测井状态 (1:正常,2:报警) - if (busWellDTOList != null && busWellDTOList.size() > 0) { - alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); - } - } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + JsonFactory factory = new JsonFactory(); + try (JsonParser parser = factory.createParser(jsonObject.getString("data"))) { + // 定位到 "data" 数组 + while (parser.nextToken() != JsonToken.START_ARRAY) { + parser.nextToken(); } + // 逐条处理数据 + while (parser.nextToken() != JsonToken.END_ARRAY) { + if (parser.getCurrentToken() == JsonToken.START_OBJECT) { + processSingleData(parseJsonObject(parser)); + } + + } + } catch (IOException e) { + e.printStackTrace(); } + return true; } + private PanDataDTO parseJsonObject(JsonParser parser) throws IOException { + PanDataDTO panDataDTO = new PanDataDTO(); + while (parser.nextToken() != JsonToken.END_OBJECT) { + String fieldName = parser.getCurrentName(); + if ("dataTime".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataTime(parser.getText()); + } else if ("attributeType".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setAttributeType(parser.getText()); + } else if ("dataValue".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataValue(parser.getText()); + } else if ("deviceCode".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDeviceCode(parser.getText()); + } + } + return panDataDTO; + } + + + private void processSingleData(PanDataDTO panDataDTO) { + try { + String devCode = panDataDTO.getDeviceCode(); + if (ObjectUtil.isEmpty(devCode)) return; + List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); + String gas = panDataDTO.getDataValue(); + String attributeType = panDataDTO.getAttributeType(); + //暂只存浓度 + if ("2".equals(attributeType)) return; + String dataTime = panDataDTO.getDataTime(); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataPanGas.builder() + .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .deviceCode(devCode) + .concentration(gas) + .logtime(DateUtil.parseDateTime(dataTime)) + .build());//存储采集数据 + + boolean alarmFlag = false; + String bfcf = busDeviceService.getBfcf(devCode); + 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))) { +// dataTime = dataTime.replaceAll("-", ""); +// dataTime = dataTime.replaceAll(":", ""); +// dataTime = dataTime.replaceAll("\\s+", ""); + alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); + //7.更新监测井状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + log.error("处理云台数据时发生异常,devcode:{},data:{},e:{}", panDataDTO.getDeviceCode(), panDataDTO.toString(), e); + } + } + + +// @Transactional +// @Override +// public boolean processAcceptGasData(Map dataParams) { +// JSONObject jsonObject = new JSONObject(dataParams); +// JSONArray jsonArray = jsonObject.getJSONArray("data"); +// String devCode = ""; +// for (int i = 0; i < jsonArray.size(); i++) { +// try { +// devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); +// if (ObjectUtil.isEmpty(devCode)) continue; +// List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); +// String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); +// String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); +// //暂只存浓度 +// if ("2".equals(attributeType)) continue; +// String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); +// gas = String.format("%.2f", Double.valueOf(gas)); +// //1.存数据 +// save(DataPanGas.builder() +// .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") +// .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") +// .deviceCode(devCode) +// .concentration(gas) +// .logtime(DateUtil.parseDateTime(dataTime)) +// .build());//存储采集数据 +// //2.有无超限处理流程(判断最后一条数据) +//// if (i < jsonArray.size() - 1) continue; +// +// //3.清除设备告警 +//// alarmRecordsService.cancelDeviceAlarm(devCode); +// //4.存报警 +// //若没绑场站,则不产生报警 +// boolean alarmFlag = false; +// String bfcf = busDeviceService.getBfcf(devCode); +// 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))) { +//// dataTime = dataTime.replaceAll("-", ""); +//// dataTime = dataTime.replaceAll(":", ""); +//// dataTime = dataTime.replaceAll("\\s+", ""); +// alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); +// } +// break; +// } +// } +// } +// //5.清数据报警 +// if (!alarmFlag) { +// alarmRecordsService.cancelDataAlarm(devCode); +// } +// //6.更新电量及状态 (1:正常,2:报警) +// alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); +// //7.更新监测井状态 (1:正常,2:报警) +// if (busWellDTOList != null && busWellDTOList.size() > 0) { +// alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); +// } +// } catch (Exception e) { +// log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); +// } +// } +// return true; +// } + @Override public boolean acceptAlarmData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); 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 37d731d..a17953b 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataTubeOtherServiceImpl extends ServiceImpl implements IDataTubeOtherService, IDataAbstractService { @@ -73,7 +75,7 @@ } } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,7 +84,7 @@ imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -122,8 +124,8 @@ } //特殊处理消警 if ("CancelWaterImmersionAlarm".equals(alarmType)) { - if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { - alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + if (alarmRecordsService.isWatchAlarms(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelWatchAlarms(devCode, "WaterImmersionAlarm"); } continue; } @@ -146,8 +148,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmType)); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -227,8 +228,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java new file mode 100644 index 0000000..3be65dd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java @@ -0,0 +1,170 @@ +package com.casic.missiles.modular.aop; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.aop.annotion.ReflectionUtils; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.modular.interfaces.log.LogManager; +import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.Serializable; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Aspect +@Component +public class OperateLogAspect { + private Logger log = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private ApplicationContext applicationContext; + + public static volatile Map oldMap = new HashMap<>(); + + public OperateLogAspect() { + } + + @Pointcut("@annotation(com.casic.missiles.modular.aop.annotion.OperateLog)") + public void cutService() { + } + + @Around("cutService()") + public Object recordSysLog(ProceedingJoinPoint point) throws Throwable { + Object result = point.proceed(); + + try { + this.handle(point); + } catch (Exception var4) { + this.log.error("日志记录出错!", var4); + } + + return result; + } + + /** + * 处理请求前执行 + */ + @Before(value = "@annotation(operateLog)") + public void boBefore(JoinPoint joinPoint, OperateLog operateLog) { + Object info = joinPoint.getArgs()[0]; + if ("edit".equals(operateLog.type()) && operateLog.needDefaultCompare()) { + Class cls = operateLog.serviceClass(); + IService service = (IService) applicationContext.getBean(cls); + Object result; + if (service instanceof IBusDeviceService) { + result = ((IBusDeviceService) service).getByDeviceId((Long) ReflectionUtils.getFieldValue(info, "id")); + } else + result = service.getById((Serializable) ReflectionUtils.getFieldValue(info, "id")); + oldMap = (Map) objectToMap(result); // 存储修改前的对象 + } + } + + private void handle(ProceedingJoinPoint point) throws Exception { + Signature sig = point.getSignature(); + MethodSignature msig = null; + if (!(sig instanceof MethodSignature)) { + throw new IllegalArgumentException("该注解只能用于方法"); + } else { + msig = (MethodSignature) sig; + Object target = point.getTarget(); + Method currentMethod = target.getClass().getMethod(msig.getName(), msig.getParameterTypes()); + String methodName = currentMethod.getName(); + AuthUser user = ShiroKit.getUser(); + if (null != user) { + String className = point.getTarget().getClass().getName(); + Object[] params = point.getArgs(); + OperateLog annotation = (OperateLog) currentMethod.getAnnotation(OperateLog.class); + String bussinessName = annotation.value(); + String key = annotation.key(); + Class dictClass = annotation.dict(); + String sb = argsArrayToString(params); + String msg = sb; + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + if ("add".equals(annotation.type())) { + Map parameters = (Map) objectToMap(params[0]); + msg = CollectionUtils.isEmpty(parameters) ? sb : ReflectionUtils.parseMutiKey(dictMap, key, parameters); + } else if ("edit".equals(annotation.type())) { + msg = CollectionUtils.isEmpty(oldMap) ? sb : ReflectionUtils.contrastObj(dictClass, key, params[0], oldMap); + }else if("delete".equals(annotation.type())){ + msg=dictMap.get(annotation.key())+":"+ReflectionUtils.getDeleteKeys(params[0]); + } + LogManager.me().executeLog(LogTaskFactory.bussinessLog(user.getId(), bussinessName, className, methodName, msg)); + } + } + } + + + /** + * 参数拼装 + */ + private String argsArrayToString(Object[] paramsArray) { + Gson gson = new GsonBuilder().create(); + String params = ""; + if (paramsArray != null && paramsArray.length > 0) { + for (int i = 0; i < paramsArray.length; i++) { + if (!isFilterObject(paramsArray[i])) { + params += gson.toJson(paramsArray[i]) + " & "; + } + } + } + return params.trim(); + } + + + /** + * 判断是否需要过滤的对象。 + * + * @param o 对象信息。 + * @return 如果是需要过滤的对象,则返回true;否则返回false。 + */ + public boolean isFilterObject(final Object o) { + return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse; + } + + private Map objectToMap(Object obj) { + if (obj == null) { + return null; + } + ObjectMapper mapper = new ObjectMapper(); + mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + // 如果使用JPA请自己打开这条配置 + // mapper.addMixIn(Object.class, IgnoreHibernatePropertiesInJackson.class); + Map mappedObject = mapper.convertValue(obj, Map.class); + return mappedObject; + + + } +} + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java new file mode 100644 index 0000000..77afa9c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.aop.annotion; + +import java.lang.annotation.*; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.FIELD}) +@Documented +public @interface DataName { + String name() default ""; // 字段名称 + + /** + * 读取枚举内容转义表达式 (如: 0=男,1=女,2=未知) + */ + String readConverterExp() default ""; +} + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java new file mode 100644 index 0000000..f1f59ad --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.aop.annotion; + + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.common.constant.dictmap.base.SystemDict; + +import java.lang.annotation.*; + +@Inherited +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.METHOD}) +public @interface OperateLog { + String value() default ""; + + String key() default "id"; + + Class serviceClass() default IService.class; + + // 是否需要比较新旧数据 + boolean needDefaultCompare() default true; + + //操作类型 add update delete + String type() default "update"; + + Class dict() default SystemDict.class; +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java new file mode 100644 index 0000000..eb773ad --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java @@ -0,0 +1,328 @@ +package com.casic.missiles.modular.aop.annotion; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.modular.interfaces.dictmap.factory.DictFieldWrapperFactory; +import lombok.extern.slf4j.Slf4j; + +import java.beans.PropertyDescriptor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.*; + +import static com.casic.missiles.modular.interfaces.utils.Contrast.firstCharToLowerCase; +import static com.casic.missiles.modular.interfaces.utils.Contrast.firstCharToUpperCase; + +@Slf4j +public class ReflectionUtils { + + /** + * 直接读取对象属性值, 无视private/protected修饰符, 不经过getter函数. + * + * @param obj 读取的对象 + * @param fieldName 读取的列 + * @return 属性值 + */ + public static Object getFieldValue(final Object obj, final String fieldName) { + Field field = getAccessibleField(obj, fieldName); + if (field == null) { + throw new IllegalArgumentException("Could not find field [" + fieldName + "] on target [" + obj + "]"); + } + + Object result = null; + try { + result = field.get(obj); + } catch (IllegalAccessException e) { + log.error("不可能抛出的异常{}", e.getMessage()); + e.printStackTrace(); + } + return result; + } + + /** + * 循环向上转型, 获取对象的DeclaredField, 并强制设置为可访问.如向上转型到Object仍无法找到, 返回null. + * + * @param obj 查找的对象 + * @param fieldName 列名 + * @return 列 + */ + public static Field getAccessibleField(final Object obj, final String fieldName) { + for (Class superClass = obj.getClass(); superClass != Object.class; superClass = superClass.getSuperclass()) { + try { + Field field = superClass.getDeclaredField(fieldName); + makeAccessible(field); + return field; + } catch (NoSuchFieldException e) { // NOSONAR + // Field不在当前类定义,继续向上转型 + e.printStackTrace(); + continue; // new add + } + } + return null; + } + + /** + * 改变private/protected的成员变量为public,尽量不调用实际改动的语句,避免JDK的SecurityManager抱怨。 + * + * @param + */ + public static void makeAccessible(Field field) { + if ((!Modifier.isPublic(field.getModifiers()) || !Modifier.isPublic(field.getDeclaringClass().getModifiers()) || Modifier + .isFinal(field.getModifiers())) && !field.isAccessible()) { + field.setAccessible(true); + } + } + + /** + * 获取两个对象同名属性内容不相同的列表 + * + * @param class1 old对象 + * @param class2 new对象 + * @return 区别列表 + * @throws ClassNotFoundException 异常 + * @throws IllegalAccessException 异常 + */ + public static List> compareTwoClass(Object class1, Object class2) throws ClassNotFoundException, IllegalAccessException { + List> list = new ArrayList>(); + // 获取对象的class + Class clazz1 = class1.getClass(); + Class clazz2 = class2.getClass(); + // 获取对象的属性列表 + Field[] field1 = clazz1.getDeclaredFields(); + Field[] field2 = clazz2.getDeclaredFields(); + StringBuilder sb = new StringBuilder(); + // 遍历属性列表field1 + for (int i = 0; i < field1.length; i++) { + // 遍历属性列表field2 + for (int j = 0; j < field2.length; j++) { + // 如果field1[i]属性名与field2[j]属性名内容相同 + if (field1[i].getName().equals(field2[j].getName())) { + if (field1[i].getName().equals(field2[j].getName())) { + field1[i].setAccessible(true); + field2[j].setAccessible(true); + // 如果field1[i]属性值与field2[j]属性值内容不相同 + if (!compareTwo(field1[i].get(class1), field2[j].get(class2))) { + Map map2 = new HashMap(); + DataName name = field1[i].getAnnotation(DataName.class); + String fieldName = ""; + if (name != null) { + fieldName = name.name(); + } else { + fieldName = field1[i].getName(); + } + map2.put("name", fieldName); + map2.put("old", field1[i].get(class1)); + map2.put("new", field2[j].get(class2)); + list.add(map2); + } + break; + } + } + } + } + return list; + } + + /** + * 对比两个数据是否内容相同 + * + * @param object1 比较对象1 + * @param object2 比较对象2 + * @return boolean类型 + */ + public static boolean compareTwo(Object object1, Object object2) { + if (object1 == null && object2 == null) { + return true; + } + if (object1 == null && object2 != null) { + return false; + } + if (object1.equals(object2)) { + return true; + } + return false; + } + + public static String contrastObjByName(Class dictClass, String key, Object pojo1, Map pojo2) throws IllegalAccessException, InstantiationException { + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + String str = parseMutiKey(dictMap, key, pojo2) + ";;;"; + + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if (!"serialVersionUID".equals(field.getName())) { + String prefix = "get"; + int prefixLength = 3; + if (field.getType().getName().equals("java.lang.Boolean")) { + prefix = "is"; + prefixLength = 2; + } + + Method getMethod = null; + + try { + getMethod = clazz.getDeclaredMethod(prefix + firstCharToUpperCase(field.getName())); + } catch (NoSuchMethodException var22) { + System.err.println("this className:" + clazz.getName() + " is not methodName: " + var22.getMessage()); + continue; + } + + Object o1 = getMethod.invoke(pojo1); + Object o2 = pojo2.get(firstCharToLowerCase(getMethod.getName().substring(prefixLength))); + if (o1 != null && o2 != null) { + if (o1 instanceof Date) { + o1 = DateUtil.format(new Date(), "yyyy-MM-dd"); + } else if (o1 instanceof Integer) { + o2 = Integer.parseInt(o2.toString()); + } + + if (!o1.toString().equals(o2.toString())) { + if (i != 1) { + str = str + ";;;"; + } + + String fieldName = dictMap.get(field.getName()); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(field.getName()); + if (fieldWarpperMethodName != null) { + Object o1Warpper = DictFieldWrapperFactory.createFieldWrapper(o1, fieldWarpperMethodName); + Object o2Warpper = DictFieldWrapperFactory.createFieldWrapper(o2, fieldWarpperMethodName); + str = str + "字段名称:" + fieldName + ",旧值:" + o1Warpper + ",新值:" + o2Warpper; + } else { + str = str + "字段名称:" + fieldName + ",旧值:" + o1 + ",新值:" + o2; + } + + ++i; + } + } + } + } + } catch (Exception var23) { + var23.printStackTrace(); + } + + return str; + } + + public static String parseMutiKey(AbstractDictMap dictMap, String key, Map requests) { + StringBuilder sb = new StringBuilder(); + if (key.indexOf(",") != -1) { + String[] keys = key.split(","); + String[] var13 = keys; + int var14 = keys.length; + + for (int var7 = 0; var7 < var14; ++var7) { + String item = var13[var7].trim(); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(item); + Object value = requests.get(item); + if (fieldWarpperMethodName != null) { + Object valueWarpper = DictFieldWrapperFactory.createFieldWrapper(value, fieldWarpperMethodName); + sb.append(dictMap.get(item) + "=" + valueWarpper + ","); + } else { + sb.append(dictMap.get(item) + "=" + (ObjectUtil.isNotEmpty(value) ? value.toString() : "") + ","); + } + } + + return StrUtil.removeSuffix(sb.toString(), ","); + } else { + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(key); + Object value = requests.get(key); + if (fieldWarpperMethodName != null) { + Object valueWarpper = DictFieldWrapperFactory.createFieldWrapper(value, fieldWarpperMethodName); + sb.append(dictMap.get(key) + "=" + valueWarpper); + } else { + sb.append(dictMap.get(key) + "=" + (ObjectUtil.isNotEmpty(value) ? value.toString() : "")); + } + + return sb.toString(); + } + } + + public static String getDeleteKeys(Object pojo1) { + String str = ""; + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if ("keys".equals(field.getName())) { + PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); + Method getMethod = pd.getReadMethod(); + Object o1 = getMethod.invoke(pojo1); + return ObjectUtil.isNotEmpty(o1) ? o1.toString().replaceAll("\\[|]", "") : "".concat(",已删除"); + } + } + + } catch (Exception var21) { + var21.printStackTrace(); + } + return str; + } + + public static String contrastObj(Class dictClass, String key, Object pojo1, Map pojo2) throws IllegalAccessException, InstantiationException { + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); +// String str = parseMutiKey(dictMap, key, pojo2) + ";;;"; + String str = ""; + + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if (!"serialVersionUID".equals(field.getName())) { + PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); + Method getMethod = pd.getReadMethod(); + Object o1 = getMethod.invoke(pojo1); + Object o2 = pojo2.get(firstCharToLowerCase(getMethod.getName().substring(3))); + if (o1 != null && o2 != null) { + if (o1 instanceof Integer) { + o2 = Integer.parseInt(o2.toString()); + } else if (o1 instanceof Date) { + o1 = DateUtil.format((Date) o1, "yyyy-MM-dd HH:mm:ss"); + } + + if (!o1.toString().equals(o2.toString())) { + if (i != 1) { + str = str + ";"; + } + + String fieldName = dictMap.get(field.getName()); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(field.getName()); + if (fieldWarpperMethodName != null) { + Object o1Warpper = DictFieldWrapperFactory.createFieldWrapper(o1, fieldWarpperMethodName); + Object o2Warpper = DictFieldWrapperFactory.createFieldWrapper(o2, fieldWarpperMethodName); + str = str + fieldName + ":将【" + o1Warpper + "】,改为【" + o2Warpper + "】"; + } else { + str = str + fieldName + ":将【" + o1 + "】,改为【" + o2 + "】"; + } + + ++i; + } + } + } + } + } catch (Exception var21) { + var21.printStackTrace(); + } + + return str; + } + + +} \ No newline at end of file diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java index 7497ebf..18fd820 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java @@ -8,12 +8,14 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.StateDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.DeviceTypeDict; import com.casic.missiles.modular.device.dto.BaseDeviceTypeDTO; import com.casic.missiles.modular.device.dto.BaseDeviceTypeIdsDTO; import com.casic.missiles.modular.device.dto.SelectDTO; @@ -63,6 +65,7 @@ return ReturnUtil.success(super.packForBT(baseDeviceTypePage)); } + @OperateLog(value = "新增设备类型", key = "typeName,watchObject,isUsed,typeDescription", dict = DeviceTypeDict.class, type = "add") @ApiOperation("增加设备类型") @PostMapping("/add") @ResponseBody @@ -71,6 +74,7 @@ return ReturnUtil.success(iBaseDeviceTypeService.saveBaseDeviceType(baseDeviceType)); } + @OperateLog(value = "编辑设备类型", dict = DeviceTypeDict.class, serviceClass = IBaseDeviceTypeService.class, type = "edit") @ApiOperation("编辑设备类型") @PostMapping("/edit") @ResponseBody @@ -81,10 +85,11 @@ return ReturnUtil.success(iBaseDeviceTypeService.updateById(baseDeviceType)); } + @OperateLog(value = "删除设备类型", key = "typeName", dict = DeviceTypeDict.class, serviceClass = IBaseDeviceTypeService.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); @@ -113,7 +118,7 @@ public ReturnDTO selectList(@RequestBody BaseDeviceTypeIdsDTO request) { QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.in(request.getDeviceTypeList()!=null&&request.getDeviceTypeList().size()>0, "id", request.getDeviceTypeList()); + queryWrapper.in(request.getDeviceTypeList() != null && request.getDeviceTypeList().size() > 0, "id", request.getDeviceTypeList()); queryWrapper.eq("IS_USED", "1"); List baseDeviceTypes = iBaseDeviceTypeService.list(queryWrapper); List selectDTOS = new ArrayList<>(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java index 42d752d..54944e2 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java @@ -3,14 +3,15 @@ import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.IdDTO; -import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.ProductDict; import com.casic.missiles.modular.device.dto.BaseProductDTO; import com.casic.missiles.modular.device.dto.SelectProductDTO; import com.casic.missiles.modular.device.entity.BaseProduct; @@ -21,7 +22,6 @@ import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; -import java.util.List; import java.util.Objects; /** @@ -49,6 +49,7 @@ return ReturnUtil.success(super.packForBT(iBaseProductService.pageList(page, requestDTO))); } + @OperateLog(value = "新增产品", key = "productName,deviceType,deviceModel,manufacturerId,protocol,accessMethod,powerSupplyMode,dataService", dict = ProductDict.class, type = "add") @ApiOperation("新增") @PostMapping("/add") @ResponseBody @@ -58,6 +59,7 @@ } + @OperateLog(value = "编辑产品", dict = ProductDict.class, serviceClass = IBaseProductService.class, type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -68,10 +70,11 @@ return ReturnUtil.success(iBaseProductService.updateBaseProductById(baseProduct)); } + @OperateLog(value = "删除产品", key = "productName", dict = ProductDict.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 509bd7b..103acf2 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 @@ -9,6 +9,7 @@ import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; @@ -17,6 +18,7 @@ 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.aop.annotion.OperateLog; import com.casic.missiles.modular.device.dict.BusConfigDict; import com.casic.missiles.modular.device.dict.DeviceDict; import com.casic.missiles.modular.device.dto.*; @@ -65,7 +67,8 @@ } - @BussinessLog(value = "新增设备", key = "devcode,deviceName,deviceType,installDate,productId", dict = DeviceDict.class) + @OperateLog(value = "新增设备", key = "devcode,deviceType,productId," + + "valid,communicationType,simId,warrantyPeriod,tagNumber,leftLength,rightLength,", dict = DeviceDict.class,type = "add") @CacheEvict(value="busLedgersCache", key="#busDevice.getDevcode()") @ApiOperation("新增") @PostMapping("/add") @@ -75,7 +78,8 @@ } - @BussinessLog(value = "编辑设备", key = "devcode,deviceName,deviceType,installDate,productId", dict = DeviceDict.class) + @OperateLog(value = "编辑设备", key = "devcode,deviceType,installDate,productId," + + "leftLength,rightLength,communicationType,simId,warrantyPeriod", dict = DeviceDict.class,serviceClass = IBusDeviceService.class,type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -86,11 +90,12 @@ return ReturnUtil.success(iBusDeviceService.updateBusDevice(busDevice)); } + @OperateLog(value = "删除设备", key = "devcode", dict = DeviceDict.class,serviceClass = IBusDeviceService.class,type = "delete") @CacheEvict(value="busLedgersCache", allEntries = true) @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 31de56e..6f35acd 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 @@ -4,8 +4,8 @@ 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.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.page.PageFactory; @@ -16,11 +16,8 @@ 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.BusDeviceDTO; -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.BusDevice; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.CommonUtil; @@ -53,6 +50,7 @@ private final IBusLedgerPipeService iBusLedgerPipeService; private final IBaseExportService iBaseExportService; + private final AbstractDictService abstractDictService; @ApiOperation("新建点位") @PostMapping("/addPosition") @@ -60,10 +58,10 @@ 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,"安装位号已存!!!"); + if (busLedgerPipeList != null && busLedgerPipeList.size() > 0) { + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE, "安装位号已存!!!"); } - Long id =IdUtil.getSnowflake(1,2).nextId(); + Long id = IdUtil.getSnowflake(1, 2).nextId(); busLedgerPipe.setId(id); busLedgerPipe.setLedgerCode(busLedgerPipe.getTagNumber()); busLedgerPipe.setArea(CommonUtil.getAreaCode(busLedgerPipe.getPosition())); @@ -139,7 +137,11 @@ page.setCurrent(1); page.setSize(Integer.MAX_VALUE); Page devicePage = iBusLedgerPipeService.listPage(page, busLedgerPipeRequestDTO); + List records = devicePage.getRecords(); try { + for (BusLedgerPipe busLedgerPipe : records) { + busLedgerPipe.setLocationCategory(abstractDictService.getDictNameByCode("locationType", busLedgerPipe.getLocationCategory())); + } iBaseExportService.exportExcel(response, BusLedgerPipe.class, devicePage.getRecords(), ExportEnum.LEDGER_PIPE_EXPORT.getSheetName()); } catch (Exception e) { e.printStackTrace(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java index e87f3f8..8040c74 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java @@ -7,10 +7,13 @@ 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.DeletesDTO; import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.ProtocolDict; import com.casic.missiles.modular.device.dto.BusProtocolDTO; import com.casic.missiles.modular.device.entity.BusProtocol; import com.casic.missiles.modular.device.service.IBusProtocolService; @@ -35,10 +38,10 @@ @RestController @RequestMapping("/system/busProtocol") public class BusProtocolController extends ExportController { - + private final IBusProtocolService protocolService; - + @ApiOperation("查询分页接口") @PostMapping("/listPage") @ResponseBody @@ -47,9 +50,10 @@ queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getProtocolName()), "PROTOCOL_NAME", requestDTO.getProtocolName()); queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getProtocolCode()), "PROTOCOL_CODE", requestDTO.getProtocolCode()); Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(protocolService.page(page,queryWrapper))); + return ReturnUtil.success(super.packForBT(protocolService.page(page, queryWrapper))); } + @OperateLog(value = "新增协议", key = "protocolName,protocolCode,version,ip,description", dict = ProtocolDict.class, type = "add") @ApiOperation("新增") @PostMapping("/add") @ResponseBody @@ -58,6 +62,7 @@ return ReturnUtil.success(protocolService.save(busProtocol)); } + @OperateLog(value = "编辑协议", dict = ProtocolDict.class, serviceClass = IBusProtocolService.class, type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -68,10 +73,11 @@ return ReturnUtil.success(protocolService.updateById(busProtocol)); } + @OperateLog(value = "删除协议", key = "protocolName", dict = ProtocolDict.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 23ddee9..24c4712 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 @@ -2,7 +2,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.entity.BusDevice; import com.casic.missiles.util.InConditionDriver; @@ -46,27 +45,27 @@ @Param("orderColumn") String orderColumn, @Param("request") CommonRequestDTO request); - @Select("SELECT BFZT from bus_device where VALID=1 and DEVCODE= #{devcode} limit 1" ) - String getBfcf( @Param("devcode") String devcode); + @Select("SELECT BFZT from bus_device where VALID=1 and DEVCODE= #{devcode} limit 1") + String getBfcf(@Param("devcode") String devcode); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getMethaneData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getMethaneData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_tube_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getTubeOtherData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_tube_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getTubeOtherData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gasliquid_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getLGData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gasliquid_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getLGData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_monitor_pipe_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getMonitorPipeOtherData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_monitor_pipe_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getMonitorPipeOtherData(@Param("devcodes") List devcodes); - @Select("SELECT ALARM_THRESHOLD FROM `alarm_rule_device` where DEVCODE = #{devcode} order by ALARM_THRESHOLD asc " ) + @Select("SELECT ALARM_THRESHOLD FROM `alarm_rule_device` where DEVCODE = #{devcode} order by ALARM_THRESHOLD asc ") List getSpecialDeviceRule(@Param("devcode") String devcode); @Select(" select ar.ALARM_THRESHOLD from alarm_rule ar where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + @@ -81,4 +80,7 @@ "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") List getListByWellId(@Param("wellId") Long wellId); + + BusDeviceOperateLogDTO getByDeviceId(@Param("id") Long id); + } 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 8ba4b15..3109344 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 @@ -44,7 +44,7 @@ LEFT JOIN base_product bp ON bd.PRODUCT_ID = bp.ID LEFT JOIN bus_device_ledger br on br.DEVICE_ID = bd.ID AND br.VALID='1' LEFT JOIN bus_manufacturer bm on bm.ID = bp.MANUFACTURER_ID - LEFT JOIN bus_ledger_all_view bl on bl.ID = br.LEDGER_ID AND br.VALID='1' and bl.type = br.type + LEFT JOIN bus_ledger_all_view bl on bl.ID = br.LEDGER_ID AND bl.VALID='1' and bl.type = br.type where bd.valid>0 @@ -95,6 +95,32 @@ + + + SELECT - rd.*, - at.alarm_type, - bt.TYPE_NAME as devTypeName - FROM - alarm_records rd - LEFT JOIN bus_ledger_all_view lr ON lr.ledgerCode = rd.LEDGER_CODE - LEFT JOIN alarm_type at ON at.ID = rd.ALARM_TYPE_ID - LEFT JOIN bus_device bd ON bd.DEVCODE = rd.DEVCODE and bd.valid >0 - LEFT JOIN base_device_type bt ON bt.id = bd.DEVICE_TYPE + rd.*, + AT.alarm_type, + bt.TYPE_NAME AS devTypeName + FROM + alarm_records rd + LEFT JOIN bus_device bd ON bd.DEVCODE = rd.DEVCODE + AND bd.valid > 0 + LEFT JOIN bus_device_ledger bl ON bd.ID = bl.DEVICE_ID + AND bl.VALID = '1' + 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' + AND lr.ledgerCode = rd.LEDGER_CODE + LEFT JOIN alarm_type AT ON AT.ID = rd.ALARM_TYPE_ID + LEFT JOIN base_device_type bt ON bt.id = bd.DEVICE_TYPE where rd.STATUS ='1' and rd.EXCEPTION_TYPE='0' @@ -695,6 +705,7 @@ dt.LOGTIME, bv.tagNumber, bv.ledgerCode, + bv.ledgerName, bdt.TYPE_NAME, bv.place, bv.type, @@ -720,6 +731,7 @@ t.tagNumber, t.ledgerCode, t.TYPE_NAME, + t.ledgerName, t.OFF_DAYS, t.LOGTIME, t.place, diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml index 7aff0f0..a63dac1 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmStaticsMapper.xml @@ -25,34 +25,55 @@ diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java index 3e0edd6..9dab3a7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/DeviceAlarmDetailDTO.java @@ -71,4 +71,18 @@ private Long deptid; + @ApiModelProperty("经度") + private String lngGaode; + + @ApiModelProperty("纬度") + private String latGaode; + + @ApiModelProperty("监测类型") + private String watchObject; + + @ApiModelProperty("点位id") + private Long ledgerId; + + + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java index e938da8..60464c4 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/OffDeviceDTO.java @@ -12,6 +12,7 @@ private String deviceType; private String tagNumber; private String ledgerCode; + private String ledgerName; private String place; //台账类型 private String type; 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 ac4cabe..e623df7 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 @@ -44,6 +44,7 @@ import static cn.hutool.core.date.DateUnit.DAY; import static com.casic.missiles.util.TimeConvertUtil.TimeConverter; +import static com.casic.missiles.util.TimeConvertUtil.TimeConverterSecond; /** *

@@ -180,8 +181,8 @@ public DeviceAlarmDetailDTO deviceAlarmDetail(Long id) { DeviceAlarmDetailDTO alarmDetail = this.baseMapper.deviceAlarmDetail(id); - alarmDetail.setCancelDuration(TimeConverter(alarmDetail.getCancelDuration())); - alarmDetail.setProcessDuration(TimeConverter(alarmDetail.getProcessDuration())); + alarmDetail.setCancelDuration(TimeConverterSecond(alarmDetail.getCancelDuration())); + alarmDetail.setProcessDuration(TimeConverterSecond(alarmDetail.getProcessDuration())); alarmDetail.setDeptName(ObjectUtil.isNotEmpty(alarmDetail.getDeptid()) ? commonServer.getDeptNamesByDeptId(alarmDetail.getDeptid()) : ""); // alarmDetail.setAddress(alarmDetail.getTagNumber().concat("|").concat(alarmDetail.getLedgerName())); alarmDetail.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmDetail.getAlarmCategory())); @@ -524,16 +525,26 @@ @Override public void cancelDeviceAlarm(String devCode) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("DEVCODE", devCode); - updateWrapper.eq("EXCEPTION_TYPE", "1"); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("DEVCODE", devCode); + queryWrapper.eq("EXCEPTION_TYPE", "1"); //只有挂起和已处置的才消 // updateWrapper.ge("PROCESS_STATUS", "3"); - updateWrapper.eq("STATUS", "1"); - updateWrapper.set("STATUS", "0"); - updateWrapper.set("CANCEL_TIME", new Date()); - this.update(updateWrapper); - //toDo:需要加流程取消日志 + queryWrapper.eq("STATUS", "1"); + List alarmRecordsList = this.list(queryWrapper); + if (alarmRecordsList != null && alarmRecordsList.size() > 0) { + alarmRecordsList.forEach(alarmRecords -> { + alarmRecords.setStatus("0"); + alarmRecords.setCancelTime(new Date()); + alarmRecords.setPreProcessStatus(alarmRecords.getProcessStatus()); + alarmRecords.setProcessStatus(ApprovalStatusEnum.FINISHED.getCode()); + this.updateById(alarmRecords); + }); + //添加流程日志 + approvalLogMapper.insert(new ApprovalLog(alarmRecordsList.get(0).getId(), "1", + "", ApprovalStatusEnum.FINISHED.getCode(), + null)); + } } @Override @@ -674,8 +685,12 @@ AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.getAlarmTypeId(), data.concat("%LEL"), data, - alarmRuleResponseDTO.getAlarmLevelId(),DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmRuleResponseDTO.getAlarmTypeName(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmRuleResponseDTO.getAlarmLevelId(), DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmRuleResponseDTO.getAlarmTypeName(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -721,7 +736,7 @@ @Override - public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime,List busWellDTOList, + public boolean saveWatchAlarms(String devCode, String data, String upTime, String logTime, List busWellDTOList, Long alarmTypeId, Long alarmLevelId, String alarmTypeName, String typeName) { @@ -730,8 +745,12 @@ try { AlarmRecords alarmRecords = new AlarmRecords(alarmId, devCode, busLedgerDTO.getLedgerCode(), busLedgerDTO.getTagNumber(), alarmTypeId, AlarmEnum.getValue(data), data, - alarmLevelId, DateUtil.parse(upTime),DateUtil.parse(logTime), - alarmTypeName, busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "0"); + alarmLevelId, DateUtil.parse(upTime), DateUtil.parse(logTime), + alarmTypeName, + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace() + , "0"); this.save(alarmRecords); alarmId = alarmRecords.getId(); } catch (Exception e) { @@ -793,7 +812,11 @@ busLedgerDTO.getTagNumber(), alarmRuleResponseDTO.get().getAlarmTypeId(), alarmRuleResponseDTO.get().getAlarmTypeName(), alarmRuleResponseDTO.get().getAlarmLevelId(), DateUtil.parse(logTime), - alarmRuleResponseDTO.get().getAlarmThreshold(), busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()), "1"); + alarmRuleResponseDTO.get().getAlarmThreshold(), + ObjectUtil.isNotEmpty(busLedgerDTO.getLedgerName()) ? + busLedgerDTO.getTagNumber().concat("|").concat(busLedgerDTO.getLedgerName()) : + busLedgerDTO.getPlace(), + "1"); this.save(alarmRecords); } catch (Exception e) { e.printStackTrace(); @@ -846,8 +869,8 @@ * @param cell */ @Override - public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent,String logTime) { - this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent,DateUtil.parse(logTime)); + public void updateCell(String devCode, String onLineStatus, String cell, String value, String alarmContent, String logTime) { + this.baseMapper.updateCell(devCode, onLineStatus, cell, value, alarmContent, DateUtil.parse(logTime)); } @Override @@ -903,7 +926,10 @@ offDeviceDTO.getAlarmLevelId(), new Date(), offDeviceDTO.getAlarmThreshold(), - offDeviceDTO.getPlace(), "1"); + ObjectUtil.isNotEmpty(offDeviceDTO.getLedgerName()) ? + offDeviceDTO.getTagNumber().concat("|"). + concat(offDeviceDTO.getLedgerName()) : + offDeviceDTO.getPlace(), "1"); alarmRecordsList.add(alarmRecords); ledgers.add(offDeviceDTO); } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java new file mode 100644 index 0000000..cb554b9 --- /dev/null +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/dto/PanDataDTO.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.data.dto; + + +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class PanDataDTO implements Serializable { + + private static final long serialVersionUID = 1232822221212L; + + private String dataTime; + + private String attributeType; + + private String dataValue; + + private String deviceCode; + + + +} 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 index a082d00..2a943ad 100644 --- 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 @@ -23,6 +23,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -37,6 +38,7 @@ * @author zt * @since 2025-01-22 */ +@Slf4j @RequiredArgsConstructor @Service public class DataGasOtherServiceImpl extends ServiceImpl implements IDataGasOtherService, IDataAbstractService { @@ -71,8 +73,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -80,8 +81,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}",devCode, e); } } @@ -141,8 +141,7 @@ } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -222,8 +221,10 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); +// e.printStackTrace(); +// log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); + } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java index dd80611..cd24860 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataGasServiceImpl.java @@ -83,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -124,8 +123,7 @@ busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } } @@ -200,8 +198,7 @@ alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode,jsonArray.get(i).toString(), e); } } //低电量报警处理 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 302b446..f0def39 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 @@ -76,8 +76,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -85,8 +84,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理日志时发生异常,devcode:{},e:{}",devCode, e); } } } @@ -133,8 +131,7 @@ if (i < jsonArray.size() - 1) continue; busDeviceService.updateBusDeviceStatus(devCode, DictEnum.DEVICE_FAILURE); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -217,8 +214,7 @@ } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } 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 e5ba8f7..a02af88 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataMonitorPipeOtherServiceImpl extends ServiceImpl implements IDataMonitorPipeOtherService, IDataAbstractService { @@ -73,8 +75,7 @@ } } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,8 +83,7 @@ String iccid = jsonObject.get("iccid").toString(); imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -116,8 +116,7 @@ //2.写入新的报警 alarmRecordsService.saveDeviceAlarms(devCode, logTime, busWellDTOList, alarmDeviceRuleResponseDTO); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存设备报警:" + eventTypeCode + "失败-------"); + log.error("处理报警时发生异常,devcode:{},e:{}", devCode, e); } } } @@ -160,8 +159,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmEventCode)); } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -341,8 +339,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag || ObjectUtil.isNotEmpty(alarmContent) ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java index 5dc8c2b..f383690 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/data/service/impl/DataPanGasServiceImpl.java @@ -2,7 +2,6 @@ import cn.hutool.core.date.DateUtil; 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; @@ -13,15 +12,20 @@ import com.casic.missiles.modular.alarm.service.IAlarmRuleService; import com.casic.missiles.modular.data.dao.DataGasMapper; import com.casic.missiles.modular.data.dao.DataPanGasMapper; +import com.casic.missiles.modular.data.dto.PanDataDTO; import com.casic.missiles.modular.data.entity.DataPanGas; import com.casic.missiles.modular.data.service.IDataPanGasService; import com.casic.missiles.modular.device.service.IBusDeviceService; import com.casic.missiles.util.CommonUtil; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonToken; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.io.IOException; import java.util.Date; import java.util.List; import java.util.Map; @@ -68,78 +72,179 @@ } - @Transactional @Override public boolean processAcceptGasData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); - JSONArray jsonArray = jsonObject.getJSONArray("data"); - String devCode = ""; - for (int i = 0; i < jsonArray.size(); i++) { - try { - devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); - if (ObjectUtil.isEmpty(devCode)) continue; - List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); - String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); - String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); - //暂只存浓度 - if ("2".equals(attributeType)) continue; - String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); - gas = String.format("%.2f", Double.valueOf(gas)); - //1.存数据 - save(DataPanGas.builder() - .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") - .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") - .deviceCode(devCode) - .concentration(gas) - .logtime(DateUtil.parseDateTime(dataTime)) - .build());//存储采集数据 - //2.有无超限处理流程(判断最后一条数据) -// if (i < jsonArray.size() - 1) continue; - - //3.清除设备告警 - alarmRecordsService.cancelDeviceAlarm(devCode); - //4.存报警 - //若没绑场站,则不产生报警 - boolean alarmFlag = false; - String bfcf = busDeviceService.getBfcf(devCode); - 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))) { - dataTime = dataTime.replaceAll("-", ""); - dataTime = dataTime.replaceAll(":", ""); - dataTime = dataTime.replaceAll("\\s+", ""); - alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); - } - break; - } - } - } - //5.清数据报警 - if (!alarmFlag) { - alarmRecordsService.cancelDataAlarm(devCode); - } - //6.更新电量及状态 (1:正常,2:报警) - alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); - //7.更新监测井状态 (1:正常,2:报警) - if (busWellDTOList != null && busWellDTOList.size() > 0) { - alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); - } - } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + JsonFactory factory = new JsonFactory(); + try (JsonParser parser = factory.createParser(jsonObject.getString("data"))) { + // 定位到 "data" 数组 + while (parser.nextToken() != JsonToken.START_ARRAY) { + parser.nextToken(); } + // 逐条处理数据 + while (parser.nextToken() != JsonToken.END_ARRAY) { + if (parser.getCurrentToken() == JsonToken.START_OBJECT) { + processSingleData(parseJsonObject(parser)); + } + + } + } catch (IOException e) { + e.printStackTrace(); } + return true; } + private PanDataDTO parseJsonObject(JsonParser parser) throws IOException { + PanDataDTO panDataDTO = new PanDataDTO(); + while (parser.nextToken() != JsonToken.END_OBJECT) { + String fieldName = parser.getCurrentName(); + if ("dataTime".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataTime(parser.getText()); + } else if ("attributeType".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setAttributeType(parser.getText()); + } else if ("dataValue".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDataValue(parser.getText()); + } else if ("deviceCode".equals(fieldName)) { + parser.nextToken(); + panDataDTO.setDeviceCode(parser.getText()); + } + } + return panDataDTO; + } + + + private void processSingleData(PanDataDTO panDataDTO) { + try { + String devCode = panDataDTO.getDeviceCode(); + if (ObjectUtil.isEmpty(devCode)) return; + List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); + String gas = panDataDTO.getDataValue(); + String attributeType = panDataDTO.getAttributeType(); + //暂只存浓度 + if ("2".equals(attributeType)) return; + String dataTime = panDataDTO.getDataTime(); + gas = String.format("%.2f", Double.valueOf(gas)); + //1.存数据 + save(DataPanGas.builder() + .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") + .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") + .deviceCode(devCode) + .concentration(gas) + .logtime(DateUtil.parseDateTime(dataTime)) + .build());//存储采集数据 + + boolean alarmFlag = false; + String bfcf = busDeviceService.getBfcf(devCode); + 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))) { +// dataTime = dataTime.replaceAll("-", ""); +// dataTime = dataTime.replaceAll(":", ""); +// dataTime = dataTime.replaceAll("\\s+", ""); + alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); + } + break; + } + } + } + //5.清数据报警 + if (!alarmFlag) { + alarmRecordsService.cancelDataAlarm(devCode); + } + //6.更新电量及状态 (1:正常,2:报警) + alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); + //7.更新监测井状态 (1:正常,2:报警) + if (busWellDTOList != null && busWellDTOList.size() > 0) { + alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); + } + } catch (Exception e) { + log.error("处理云台数据时发生异常,devcode:{},data:{},e:{}", panDataDTO.getDeviceCode(), panDataDTO.toString(), e); + } + } + + +// @Transactional +// @Override +// public boolean processAcceptGasData(Map dataParams) { +// JSONObject jsonObject = new JSONObject(dataParams); +// JSONArray jsonArray = jsonObject.getJSONArray("data"); +// String devCode = ""; +// for (int i = 0; i < jsonArray.size(); i++) { +// try { +// devCode = ((JSONObject) jsonArray.get(i)).getString("deviceCode"); +// if (ObjectUtil.isEmpty(devCode)) continue; +// List busWellDTOList = this.dataGasMapper.getListByDevCode(devCode); +// String gas = ((JSONObject) jsonArray.get(i)).getString("dataValue"); +// String attributeType = ((JSONObject) jsonArray.get(i)).getString("attributeType"); +// //暂只存浓度 +// if ("2".equals(attributeType)) continue; +// String dataTime = ((JSONObject) jsonArray.get(i)).getString("dataTime"); +// gas = String.format("%.2f", Double.valueOf(gas)); +// //1.存数据 +// save(DataPanGas.builder() +// .ledgerCode(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getLedgerCode() : "") +// .ledgerNumber(busWellDTOList != null && busWellDTOList.size() > 0 ? busWellDTOList.get(0).getTagNumber() : "") +// .deviceCode(devCode) +// .concentration(gas) +// .logtime(DateUtil.parseDateTime(dataTime)) +// .build());//存储采集数据 +// //2.有无超限处理流程(判断最后一条数据) +//// if (i < jsonArray.size() - 1) continue; +// +// //3.清除设备告警 +//// alarmRecordsService.cancelDeviceAlarm(devCode); +// //4.存报警 +// //若没绑场站,则不产生报警 +// boolean alarmFlag = false; +// String bfcf = busDeviceService.getBfcf(devCode); +// 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))) { +//// dataTime = dataTime.replaceAll("-", ""); +//// dataTime = dataTime.replaceAll(":", ""); +//// dataTime = dataTime.replaceAll("\\s+", ""); +// alarmRecordsService.saveAlarms(devCode, gas, dataTime, dataTime, busWellDTOList, alarmRuleResponseDTO, DeviceTypeEnum.PANTILT.getName()); +// } +// break; +// } +// } +// } +// //5.清数据报警 +// if (!alarmFlag) { +// alarmRecordsService.cancelDataAlarm(devCode); +// } +// //6.更新电量及状态 (1:正常,2:报警) +// alarmRecordsService.updateCell(devCode, alarmFlag ? "2" : "1", "", gas, alarmFlag ? "浓度达到".concat(gas).concat("PPM.M") : "", DateUtil.formatDateTime(new Date())); +// //7.更新监测井状态 (1:正常,2:报警) +// if (busWellDTOList != null && busWellDTOList.size() > 0) { +// alarmRecordsService.updateWellStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); +// } +// } catch (Exception e) { +// log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); +// } +// } +// return true; +// } + @Override public boolean acceptAlarmData(Map dataParams) { JSONObject jsonObject = new JSONObject(dataParams); 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 37d731d..a17953b 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 @@ -24,6 +24,7 @@ import com.casic.missiles.modular.device.service.IBusImeiIccidService; import com.casic.missiles.util.CommonUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,7 @@ * @author zt * @since 2024-08-29 */ +@Slf4j @RequiredArgsConstructor @Service public class DataTubeOtherServiceImpl extends ServiceImpl implements IDataTubeOtherService, IDataAbstractService { @@ -73,7 +75,7 @@ } } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("更新参数下发时发生异常,devcode:{},e:{}", devCode, e); } } else if (mType[4].equals(json.get("mType"))) {//三码存储 try { @@ -82,7 +84,7 @@ imeiManager.saveData(devCode, imei, iccid); } catch (Exception e) { e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + log.error("处理三码时发生异常,devcode:{},e:{}", devCode, e); } } @@ -122,8 +124,8 @@ } //特殊处理消警 if ("CancelWaterImmersionAlarm".equals(alarmType)) { - if (alarmRecordsService.isDeviceAlarmByCode(devCode, "WaterImmersionAlarm")) { - alarmRecordsService.cancelDeviceAlarmByEventCode(devCode, "WaterImmersionAlarm"); + if (alarmRecordsService.isWatchAlarms(devCode, "WaterImmersionAlarm")) { + alarmRecordsService.cancelWatchAlarms(devCode, "WaterImmersionAlarm"); } continue; } @@ -146,8 +148,7 @@ busDeviceService.updateBusDeviceStatus(devCode, AlarmEnum.getValue(alarmType)); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } @@ -227,8 +228,7 @@ alarmRecordsService.updatePipeStatus(busWellDTOList.get(0).getTagNumber(), alarmFlag ? "2" : "1"); } } catch (Exception e) { - e.printStackTrace(); - log.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + log.error("处理日志时发生异常,devcode:{},data:{},e:{}", devCode, jsonArray.get(i).toString(), e); } } } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java new file mode 100644 index 0000000..3be65dd --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/OperateLogAspect.java @@ -0,0 +1,170 @@ +package com.casic.missiles.modular.aop; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.aop.annotion.ReflectionUtils; +import com.casic.missiles.modular.device.service.IBusDeviceService; +import com.casic.missiles.modular.interfaces.log.LogManager; +import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.Serializable; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Aspect +@Component +public class OperateLogAspect { + private Logger log = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private ApplicationContext applicationContext; + + public static volatile Map oldMap = new HashMap<>(); + + public OperateLogAspect() { + } + + @Pointcut("@annotation(com.casic.missiles.modular.aop.annotion.OperateLog)") + public void cutService() { + } + + @Around("cutService()") + public Object recordSysLog(ProceedingJoinPoint point) throws Throwable { + Object result = point.proceed(); + + try { + this.handle(point); + } catch (Exception var4) { + this.log.error("日志记录出错!", var4); + } + + return result; + } + + /** + * 处理请求前执行 + */ + @Before(value = "@annotation(operateLog)") + public void boBefore(JoinPoint joinPoint, OperateLog operateLog) { + Object info = joinPoint.getArgs()[0]; + if ("edit".equals(operateLog.type()) && operateLog.needDefaultCompare()) { + Class cls = operateLog.serviceClass(); + IService service = (IService) applicationContext.getBean(cls); + Object result; + if (service instanceof IBusDeviceService) { + result = ((IBusDeviceService) service).getByDeviceId((Long) ReflectionUtils.getFieldValue(info, "id")); + } else + result = service.getById((Serializable) ReflectionUtils.getFieldValue(info, "id")); + oldMap = (Map) objectToMap(result); // 存储修改前的对象 + } + } + + private void handle(ProceedingJoinPoint point) throws Exception { + Signature sig = point.getSignature(); + MethodSignature msig = null; + if (!(sig instanceof MethodSignature)) { + throw new IllegalArgumentException("该注解只能用于方法"); + } else { + msig = (MethodSignature) sig; + Object target = point.getTarget(); + Method currentMethod = target.getClass().getMethod(msig.getName(), msig.getParameterTypes()); + String methodName = currentMethod.getName(); + AuthUser user = ShiroKit.getUser(); + if (null != user) { + String className = point.getTarget().getClass().getName(); + Object[] params = point.getArgs(); + OperateLog annotation = (OperateLog) currentMethod.getAnnotation(OperateLog.class); + String bussinessName = annotation.value(); + String key = annotation.key(); + Class dictClass = annotation.dict(); + String sb = argsArrayToString(params); + String msg = sb; + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + if ("add".equals(annotation.type())) { + Map parameters = (Map) objectToMap(params[0]); + msg = CollectionUtils.isEmpty(parameters) ? sb : ReflectionUtils.parseMutiKey(dictMap, key, parameters); + } else if ("edit".equals(annotation.type())) { + msg = CollectionUtils.isEmpty(oldMap) ? sb : ReflectionUtils.contrastObj(dictClass, key, params[0], oldMap); + }else if("delete".equals(annotation.type())){ + msg=dictMap.get(annotation.key())+":"+ReflectionUtils.getDeleteKeys(params[0]); + } + LogManager.me().executeLog(LogTaskFactory.bussinessLog(user.getId(), bussinessName, className, methodName, msg)); + } + } + } + + + /** + * 参数拼装 + */ + private String argsArrayToString(Object[] paramsArray) { + Gson gson = new GsonBuilder().create(); + String params = ""; + if (paramsArray != null && paramsArray.length > 0) { + for (int i = 0; i < paramsArray.length; i++) { + if (!isFilterObject(paramsArray[i])) { + params += gson.toJson(paramsArray[i]) + " & "; + } + } + } + return params.trim(); + } + + + /** + * 判断是否需要过滤的对象。 + * + * @param o 对象信息。 + * @return 如果是需要过滤的对象,则返回true;否则返回false。 + */ + public boolean isFilterObject(final Object o) { + return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse; + } + + private Map objectToMap(Object obj) { + if (obj == null) { + return null; + } + ObjectMapper mapper = new ObjectMapper(); + mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + // 如果使用JPA请自己打开这条配置 + // mapper.addMixIn(Object.class, IgnoreHibernatePropertiesInJackson.class); + Map mappedObject = mapper.convertValue(obj, Map.class); + return mappedObject; + + + } +} + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java new file mode 100644 index 0000000..77afa9c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/DataName.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.aop.annotion; + +import java.lang.annotation.*; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.FIELD}) +@Documented +public @interface DataName { + String name() default ""; // 字段名称 + + /** + * 读取枚举内容转义表达式 (如: 0=男,1=女,2=未知) + */ + String readConverterExp() default ""; +} + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java new file mode 100644 index 0000000..f1f59ad --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/OperateLog.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.aop.annotion; + + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.core.common.constant.dictmap.base.SystemDict; + +import java.lang.annotation.*; + +@Inherited +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.METHOD}) +public @interface OperateLog { + String value() default ""; + + String key() default "id"; + + Class serviceClass() default IService.class; + + // 是否需要比较新旧数据 + boolean needDefaultCompare() default true; + + //操作类型 add update delete + String type() default "update"; + + Class dict() default SystemDict.class; +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java new file mode 100644 index 0000000..eb773ad --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/aop/annotion/ReflectionUtils.java @@ -0,0 +1,328 @@ +package com.casic.missiles.modular.aop.annotion; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; +import com.casic.missiles.modular.interfaces.dictmap.factory.DictFieldWrapperFactory; +import lombok.extern.slf4j.Slf4j; + +import java.beans.PropertyDescriptor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.*; + +import static com.casic.missiles.modular.interfaces.utils.Contrast.firstCharToLowerCase; +import static com.casic.missiles.modular.interfaces.utils.Contrast.firstCharToUpperCase; + +@Slf4j +public class ReflectionUtils { + + /** + * 直接读取对象属性值, 无视private/protected修饰符, 不经过getter函数. + * + * @param obj 读取的对象 + * @param fieldName 读取的列 + * @return 属性值 + */ + public static Object getFieldValue(final Object obj, final String fieldName) { + Field field = getAccessibleField(obj, fieldName); + if (field == null) { + throw new IllegalArgumentException("Could not find field [" + fieldName + "] on target [" + obj + "]"); + } + + Object result = null; + try { + result = field.get(obj); + } catch (IllegalAccessException e) { + log.error("不可能抛出的异常{}", e.getMessage()); + e.printStackTrace(); + } + return result; + } + + /** + * 循环向上转型, 获取对象的DeclaredField, 并强制设置为可访问.如向上转型到Object仍无法找到, 返回null. + * + * @param obj 查找的对象 + * @param fieldName 列名 + * @return 列 + */ + public static Field getAccessibleField(final Object obj, final String fieldName) { + for (Class superClass = obj.getClass(); superClass != Object.class; superClass = superClass.getSuperclass()) { + try { + Field field = superClass.getDeclaredField(fieldName); + makeAccessible(field); + return field; + } catch (NoSuchFieldException e) { // NOSONAR + // Field不在当前类定义,继续向上转型 + e.printStackTrace(); + continue; // new add + } + } + return null; + } + + /** + * 改变private/protected的成员变量为public,尽量不调用实际改动的语句,避免JDK的SecurityManager抱怨。 + * + * @param + */ + public static void makeAccessible(Field field) { + if ((!Modifier.isPublic(field.getModifiers()) || !Modifier.isPublic(field.getDeclaringClass().getModifiers()) || Modifier + .isFinal(field.getModifiers())) && !field.isAccessible()) { + field.setAccessible(true); + } + } + + /** + * 获取两个对象同名属性内容不相同的列表 + * + * @param class1 old对象 + * @param class2 new对象 + * @return 区别列表 + * @throws ClassNotFoundException 异常 + * @throws IllegalAccessException 异常 + */ + public static List> compareTwoClass(Object class1, Object class2) throws ClassNotFoundException, IllegalAccessException { + List> list = new ArrayList>(); + // 获取对象的class + Class clazz1 = class1.getClass(); + Class clazz2 = class2.getClass(); + // 获取对象的属性列表 + Field[] field1 = clazz1.getDeclaredFields(); + Field[] field2 = clazz2.getDeclaredFields(); + StringBuilder sb = new StringBuilder(); + // 遍历属性列表field1 + for (int i = 0; i < field1.length; i++) { + // 遍历属性列表field2 + for (int j = 0; j < field2.length; j++) { + // 如果field1[i]属性名与field2[j]属性名内容相同 + if (field1[i].getName().equals(field2[j].getName())) { + if (field1[i].getName().equals(field2[j].getName())) { + field1[i].setAccessible(true); + field2[j].setAccessible(true); + // 如果field1[i]属性值与field2[j]属性值内容不相同 + if (!compareTwo(field1[i].get(class1), field2[j].get(class2))) { + Map map2 = new HashMap(); + DataName name = field1[i].getAnnotation(DataName.class); + String fieldName = ""; + if (name != null) { + fieldName = name.name(); + } else { + fieldName = field1[i].getName(); + } + map2.put("name", fieldName); + map2.put("old", field1[i].get(class1)); + map2.put("new", field2[j].get(class2)); + list.add(map2); + } + break; + } + } + } + } + return list; + } + + /** + * 对比两个数据是否内容相同 + * + * @param object1 比较对象1 + * @param object2 比较对象2 + * @return boolean类型 + */ + public static boolean compareTwo(Object object1, Object object2) { + if (object1 == null && object2 == null) { + return true; + } + if (object1 == null && object2 != null) { + return false; + } + if (object1.equals(object2)) { + return true; + } + return false; + } + + public static String contrastObjByName(Class dictClass, String key, Object pojo1, Map pojo2) throws IllegalAccessException, InstantiationException { + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); + String str = parseMutiKey(dictMap, key, pojo2) + ";;;"; + + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if (!"serialVersionUID".equals(field.getName())) { + String prefix = "get"; + int prefixLength = 3; + if (field.getType().getName().equals("java.lang.Boolean")) { + prefix = "is"; + prefixLength = 2; + } + + Method getMethod = null; + + try { + getMethod = clazz.getDeclaredMethod(prefix + firstCharToUpperCase(field.getName())); + } catch (NoSuchMethodException var22) { + System.err.println("this className:" + clazz.getName() + " is not methodName: " + var22.getMessage()); + continue; + } + + Object o1 = getMethod.invoke(pojo1); + Object o2 = pojo2.get(firstCharToLowerCase(getMethod.getName().substring(prefixLength))); + if (o1 != null && o2 != null) { + if (o1 instanceof Date) { + o1 = DateUtil.format(new Date(), "yyyy-MM-dd"); + } else if (o1 instanceof Integer) { + o2 = Integer.parseInt(o2.toString()); + } + + if (!o1.toString().equals(o2.toString())) { + if (i != 1) { + str = str + ";;;"; + } + + String fieldName = dictMap.get(field.getName()); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(field.getName()); + if (fieldWarpperMethodName != null) { + Object o1Warpper = DictFieldWrapperFactory.createFieldWrapper(o1, fieldWarpperMethodName); + Object o2Warpper = DictFieldWrapperFactory.createFieldWrapper(o2, fieldWarpperMethodName); + str = str + "字段名称:" + fieldName + ",旧值:" + o1Warpper + ",新值:" + o2Warpper; + } else { + str = str + "字段名称:" + fieldName + ",旧值:" + o1 + ",新值:" + o2; + } + + ++i; + } + } + } + } + } catch (Exception var23) { + var23.printStackTrace(); + } + + return str; + } + + public static String parseMutiKey(AbstractDictMap dictMap, String key, Map requests) { + StringBuilder sb = new StringBuilder(); + if (key.indexOf(",") != -1) { + String[] keys = key.split(","); + String[] var13 = keys; + int var14 = keys.length; + + for (int var7 = 0; var7 < var14; ++var7) { + String item = var13[var7].trim(); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(item); + Object value = requests.get(item); + if (fieldWarpperMethodName != null) { + Object valueWarpper = DictFieldWrapperFactory.createFieldWrapper(value, fieldWarpperMethodName); + sb.append(dictMap.get(item) + "=" + valueWarpper + ","); + } else { + sb.append(dictMap.get(item) + "=" + (ObjectUtil.isNotEmpty(value) ? value.toString() : "") + ","); + } + } + + return StrUtil.removeSuffix(sb.toString(), ","); + } else { + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(key); + Object value = requests.get(key); + if (fieldWarpperMethodName != null) { + Object valueWarpper = DictFieldWrapperFactory.createFieldWrapper(value, fieldWarpperMethodName); + sb.append(dictMap.get(key) + "=" + valueWarpper); + } else { + sb.append(dictMap.get(key) + "=" + (ObjectUtil.isNotEmpty(value) ? value.toString() : "")); + } + + return sb.toString(); + } + } + + public static String getDeleteKeys(Object pojo1) { + String str = ""; + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if ("keys".equals(field.getName())) { + PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); + Method getMethod = pd.getReadMethod(); + Object o1 = getMethod.invoke(pojo1); + return ObjectUtil.isNotEmpty(o1) ? o1.toString().replaceAll("\\[|]", "") : "".concat(",已删除"); + } + } + + } catch (Exception var21) { + var21.printStackTrace(); + } + return str; + } + + public static String contrastObj(Class dictClass, String key, Object pojo1, Map pojo2) throws IllegalAccessException, InstantiationException { + AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); +// String str = parseMutiKey(dictMap, key, pojo2) + ";;;"; + String str = ""; + + try { + Class clazz = pojo1.getClass(); + Field[] fields = pojo1.getClass().getDeclaredFields(); + int i = 1; + Field[] var9 = fields; + int var10 = fields.length; + + for (int var11 = 0; var11 < var10; ++var11) { + Field field = var9[var11]; + if (!"serialVersionUID".equals(field.getName())) { + PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); + Method getMethod = pd.getReadMethod(); + Object o1 = getMethod.invoke(pojo1); + Object o2 = pojo2.get(firstCharToLowerCase(getMethod.getName().substring(3))); + if (o1 != null && o2 != null) { + if (o1 instanceof Integer) { + o2 = Integer.parseInt(o2.toString()); + } else if (o1 instanceof Date) { + o1 = DateUtil.format((Date) o1, "yyyy-MM-dd HH:mm:ss"); + } + + if (!o1.toString().equals(o2.toString())) { + if (i != 1) { + str = str + ";"; + } + + String fieldName = dictMap.get(field.getName()); + String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(field.getName()); + if (fieldWarpperMethodName != null) { + Object o1Warpper = DictFieldWrapperFactory.createFieldWrapper(o1, fieldWarpperMethodName); + Object o2Warpper = DictFieldWrapperFactory.createFieldWrapper(o2, fieldWarpperMethodName); + str = str + fieldName + ":将【" + o1Warpper + "】,改为【" + o2Warpper + "】"; + } else { + str = str + fieldName + ":将【" + o1 + "】,改为【" + o2 + "】"; + } + + ++i; + } + } + } + } + } catch (Exception var21) { + var21.printStackTrace(); + } + + return str; + } + + +} \ No newline at end of file diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java index 7497ebf..18fd820 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseDeviceTypeController.java @@ -8,12 +8,14 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.dto.IdsDTO; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.StateDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.DictEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.DeviceTypeDict; import com.casic.missiles.modular.device.dto.BaseDeviceTypeDTO; import com.casic.missiles.modular.device.dto.BaseDeviceTypeIdsDTO; import com.casic.missiles.modular.device.dto.SelectDTO; @@ -63,6 +65,7 @@ return ReturnUtil.success(super.packForBT(baseDeviceTypePage)); } + @OperateLog(value = "新增设备类型", key = "typeName,watchObject,isUsed,typeDescription", dict = DeviceTypeDict.class, type = "add") @ApiOperation("增加设备类型") @PostMapping("/add") @ResponseBody @@ -71,6 +74,7 @@ return ReturnUtil.success(iBaseDeviceTypeService.saveBaseDeviceType(baseDeviceType)); } + @OperateLog(value = "编辑设备类型", dict = DeviceTypeDict.class, serviceClass = IBaseDeviceTypeService.class, type = "edit") @ApiOperation("编辑设备类型") @PostMapping("/edit") @ResponseBody @@ -81,10 +85,11 @@ return ReturnUtil.success(iBaseDeviceTypeService.updateById(baseDeviceType)); } + @OperateLog(value = "删除设备类型", key = "typeName", dict = DeviceTypeDict.class, serviceClass = IBaseDeviceTypeService.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); @@ -113,7 +118,7 @@ public ReturnDTO selectList(@RequestBody BaseDeviceTypeIdsDTO request) { QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.in(request.getDeviceTypeList()!=null&&request.getDeviceTypeList().size()>0, "id", request.getDeviceTypeList()); + queryWrapper.in(request.getDeviceTypeList() != null && request.getDeviceTypeList().size() > 0, "id", request.getDeviceTypeList()); queryWrapper.eq("IS_USED", "1"); List baseDeviceTypes = iBaseDeviceTypeService.list(queryWrapper); List selectDTOS = new ArrayList<>(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java index 42d752d..54944e2 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BaseProductController.java @@ -3,14 +3,15 @@ import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.IdDTO; -import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.ProductDict; import com.casic.missiles.modular.device.dto.BaseProductDTO; import com.casic.missiles.modular.device.dto.SelectProductDTO; import com.casic.missiles.modular.device.entity.BaseProduct; @@ -21,7 +22,6 @@ import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; -import java.util.List; import java.util.Objects; /** @@ -49,6 +49,7 @@ return ReturnUtil.success(super.packForBT(iBaseProductService.pageList(page, requestDTO))); } + @OperateLog(value = "新增产品", key = "productName,deviceType,deviceModel,manufacturerId,protocol,accessMethod,powerSupplyMode,dataService", dict = ProductDict.class, type = "add") @ApiOperation("新增") @PostMapping("/add") @ResponseBody @@ -58,6 +59,7 @@ } + @OperateLog(value = "编辑产品", dict = ProductDict.class, serviceClass = IBaseProductService.class, type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -68,10 +70,11 @@ return ReturnUtil.success(iBaseProductService.updateBaseProductById(baseProduct)); } + @OperateLog(value = "删除产品", key = "productName", dict = ProductDict.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 509bd7b..103acf2 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 @@ -9,6 +9,7 @@ import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.DeletesDTO; import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; @@ -17,6 +18,7 @@ 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.aop.annotion.OperateLog; import com.casic.missiles.modular.device.dict.BusConfigDict; import com.casic.missiles.modular.device.dict.DeviceDict; import com.casic.missiles.modular.device.dto.*; @@ -65,7 +67,8 @@ } - @BussinessLog(value = "新增设备", key = "devcode,deviceName,deviceType,installDate,productId", dict = DeviceDict.class) + @OperateLog(value = "新增设备", key = "devcode,deviceType,productId," + + "valid,communicationType,simId,warrantyPeriod,tagNumber,leftLength,rightLength,", dict = DeviceDict.class,type = "add") @CacheEvict(value="busLedgersCache", key="#busDevice.getDevcode()") @ApiOperation("新增") @PostMapping("/add") @@ -75,7 +78,8 @@ } - @BussinessLog(value = "编辑设备", key = "devcode,deviceName,deviceType,installDate,productId", dict = DeviceDict.class) + @OperateLog(value = "编辑设备", key = "devcode,deviceType,installDate,productId," + + "leftLength,rightLength,communicationType,simId,warrantyPeriod", dict = DeviceDict.class,serviceClass = IBusDeviceService.class,type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -86,11 +90,12 @@ return ReturnUtil.success(iBusDeviceService.updateBusDevice(busDevice)); } + @OperateLog(value = "删除设备", key = "devcode", dict = DeviceDict.class,serviceClass = IBusDeviceService.class,type = "delete") @CacheEvict(value="busLedgersCache", allEntries = true) @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 31de56e..6f35acd 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 @@ -4,8 +4,8 @@ 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.application.service.AbstractDictService; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.page.PageFactory; @@ -16,11 +16,8 @@ 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.BusDeviceDTO; -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.BusDevice; import com.casic.missiles.modular.device.entity.BusLedgerPipe; import com.casic.missiles.modular.device.service.IBusLedgerPipeService; import com.casic.missiles.util.CommonUtil; @@ -53,6 +50,7 @@ private final IBusLedgerPipeService iBusLedgerPipeService; private final IBaseExportService iBaseExportService; + private final AbstractDictService abstractDictService; @ApiOperation("新建点位") @PostMapping("/addPosition") @@ -60,10 +58,10 @@ 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,"安装位号已存!!!"); + if (busLedgerPipeList != null && busLedgerPipeList.size() > 0) { + return ReturnUtil.failed(ResponseData.DEFAULT_ERROR_CODE, "安装位号已存!!!"); } - Long id =IdUtil.getSnowflake(1,2).nextId(); + Long id = IdUtil.getSnowflake(1, 2).nextId(); busLedgerPipe.setId(id); busLedgerPipe.setLedgerCode(busLedgerPipe.getTagNumber()); busLedgerPipe.setArea(CommonUtil.getAreaCode(busLedgerPipe.getPosition())); @@ -139,7 +137,11 @@ page.setCurrent(1); page.setSize(Integer.MAX_VALUE); Page devicePage = iBusLedgerPipeService.listPage(page, busLedgerPipeRequestDTO); + List records = devicePage.getRecords(); try { + for (BusLedgerPipe busLedgerPipe : records) { + busLedgerPipe.setLocationCategory(abstractDictService.getDictNameByCode("locationType", busLedgerPipe.getLocationCategory())); + } iBaseExportService.exportExcel(response, BusLedgerPipe.class, devicePage.getRecords(), ExportEnum.LEDGER_PIPE_EXPORT.getSheetName()); } catch (Exception e) { e.printStackTrace(); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java index e87f3f8..8040c74 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/device/controller/BusProtocolController.java @@ -7,10 +7,13 @@ 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.DeletesDTO; import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.aop.annotion.OperateLog; +import com.casic.missiles.modular.device.dict.ProtocolDict; import com.casic.missiles.modular.device.dto.BusProtocolDTO; import com.casic.missiles.modular.device.entity.BusProtocol; import com.casic.missiles.modular.device.service.IBusProtocolService; @@ -35,10 +38,10 @@ @RestController @RequestMapping("/system/busProtocol") public class BusProtocolController extends ExportController { - + private final IBusProtocolService protocolService; - + @ApiOperation("查询分页接口") @PostMapping("/listPage") @ResponseBody @@ -47,9 +50,10 @@ queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getProtocolName()), "PROTOCOL_NAME", requestDTO.getProtocolName()); queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getProtocolCode()), "PROTOCOL_CODE", requestDTO.getProtocolCode()); Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(protocolService.page(page,queryWrapper))); + return ReturnUtil.success(super.packForBT(protocolService.page(page, queryWrapper))); } + @OperateLog(value = "新增协议", key = "protocolName,protocolCode,version,ip,description", dict = ProtocolDict.class, type = "add") @ApiOperation("新增") @PostMapping("/add") @ResponseBody @@ -58,6 +62,7 @@ return ReturnUtil.success(protocolService.save(busProtocol)); } + @OperateLog(value = "编辑协议", dict = ProtocolDict.class, serviceClass = IBusProtocolService.class, type = "edit") @ApiOperation("编辑") @PostMapping("/edit") @ResponseBody @@ -68,10 +73,11 @@ return ReturnUtil.success(protocolService.updateById(busProtocol)); } + @OperateLog(value = "删除协议", key = "protocolName", dict = ProtocolDict.class, type = "delete") @ApiOperation("批量删除") @PostMapping("/batchDelete") @ResponseBody - public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + public ReturnDTO batchDelete(@RequestBody DeletesDTO idsDTO) { Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); 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 23ddee9..24c4712 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 @@ -2,7 +2,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.entity.BusDevice; import com.casic.missiles.util.InConditionDriver; @@ -46,27 +45,27 @@ @Param("orderColumn") String orderColumn, @Param("request") CommonRequestDTO request); - @Select("SELECT BFZT from bus_device where VALID=1 and DEVCODE= #{devcode} limit 1" ) - String getBfcf( @Param("devcode") String devcode); + @Select("SELECT BFZT from bus_device where VALID=1 and DEVCODE= #{devcode} limit 1") + String getBfcf(@Param("devcode") String devcode); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getMethaneData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getMethaneData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_tube_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getTubeOtherData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_tube_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getTubeOtherData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gasliquid_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getLGData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_gasliquid_gas` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getLGData(@Param("devcodes") List devcodes); @Lang(InConditionDriver.class) - @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_monitor_pipe_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE" ) - List getMonitorPipeOtherData(@Param("devcodes") List devcodes); + @Select("SELECT max(LOGTIME) as logTime ,DEVCODE as devcode FROM `data_monitor_pipe_other` where DEVCODE in (#{devcodes}) and LOGTIME >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DEVCODE") + List getMonitorPipeOtherData(@Param("devcodes") List devcodes); - @Select("SELECT ALARM_THRESHOLD FROM `alarm_rule_device` where DEVCODE = #{devcode} order by ALARM_THRESHOLD asc " ) + @Select("SELECT ALARM_THRESHOLD FROM `alarm_rule_device` where DEVCODE = #{devcode} order by ALARM_THRESHOLD asc ") List getSpecialDeviceRule(@Param("devcode") String devcode); @Select(" select ar.ALARM_THRESHOLD from alarm_rule ar where ar.PRODUCT_ID in(SELECT bd.PRODUCT_ID FROM `bus_device` bd " + @@ -81,4 +80,7 @@ "where bd.VALID >0 and bv.VALID=1 and bv.id = #{wellId}") List getListByWellId(@Param("wellId") Long wellId); + + BusDeviceOperateLogDTO getByDeviceId(@Param("id") Long id); + } 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 8ba4b15..3109344 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 @@ -44,7 +44,7 @@ LEFT JOIN base_product bp ON bd.PRODUCT_ID = bp.ID LEFT JOIN bus_device_ledger br on br.DEVICE_ID = bd.ID AND br.VALID='1' LEFT JOIN bus_manufacturer bm on bm.ID = bp.MANUFACTURER_ID - LEFT JOIN bus_ledger_all_view bl on bl.ID = br.LEDGER_ID AND br.VALID='1' and bl.type = br.type + LEFT JOIN bus_ledger_all_view bl on bl.ID = br.LEDGER_ID AND bl.VALID='1' and bl.type = br.type where bd.valid>0 @@ -95,6 +95,32 @@ + + +