diff --git a/src/main/java/com/casic/controller/DeviceDataController.java b/src/main/java/com/casic/controller/DeviceDataController.java index e5351c9..971b258 100644 --- a/src/main/java/com/casic/controller/DeviceDataController.java +++ b/src/main/java/com/casic/controller/DeviceDataController.java @@ -1,7 +1,6 @@ package com.casic.controller; import com.casic.model.DataReportParam; -import com.casic.model.HeartbeatParam; import com.casic.model.ResponseData; import com.casic.service.DeviceDataService; import org.springframework.web.bind.annotation.PostMapping; @@ -19,19 +18,9 @@ this.dataService = dataService; } - @PostMapping("/commit") - public ResponseData DeviceDataCommit(@RequestBody DataReportParam dataReportParam) { - return dataService.DeviceDataCommit(dataReportParam); - } - - @PostMapping("/heartbeat") - public ResponseData heartBeat(@RequestBody HeartbeatParam heartbeatParam) { - return dataService.heartBeatSave(heartbeatParam); - } - @PostMapping("/gas/receiver") - public ResponseData gasReceiver(@RequestBody HeartbeatParam heartbeatParam) { - return dataService.heartBeatSave(heartbeatParam); + public ResponseData gasReceiver(@RequestBody DataReportParam dataReportParam) { + return dataService.gasReceiver(dataReportParam); } } diff --git a/src/main/java/com/casic/controller/DeviceDataController.java b/src/main/java/com/casic/controller/DeviceDataController.java index e5351c9..971b258 100644 --- a/src/main/java/com/casic/controller/DeviceDataController.java +++ b/src/main/java/com/casic/controller/DeviceDataController.java @@ -1,7 +1,6 @@ package com.casic.controller; import com.casic.model.DataReportParam; -import com.casic.model.HeartbeatParam; import com.casic.model.ResponseData; import com.casic.service.DeviceDataService; import org.springframework.web.bind.annotation.PostMapping; @@ -19,19 +18,9 @@ this.dataService = dataService; } - @PostMapping("/commit") - public ResponseData DeviceDataCommit(@RequestBody DataReportParam dataReportParam) { - return dataService.DeviceDataCommit(dataReportParam); - } - - @PostMapping("/heartbeat") - public ResponseData heartBeat(@RequestBody HeartbeatParam heartbeatParam) { - return dataService.heartBeatSave(heartbeatParam); - } - @PostMapping("/gas/receiver") - public ResponseData gasReceiver(@RequestBody HeartbeatParam heartbeatParam) { - return dataService.heartBeatSave(heartbeatParam); + public ResponseData gasReceiver(@RequestBody DataReportParam dataReportParam) { + return dataService.gasReceiver(dataReportParam); } } diff --git a/src/main/java/com/casic/dao/AlarmJobMapper.java b/src/main/java/com/casic/dao/AlarmJobMapper.java new file mode 100644 index 0000000..e5e9c8d --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmJobMapper.java @@ -0,0 +1,17 @@ +package com.casic.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.AlarmJob; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +@Mapper +public interface AlarmJobMapper extends BaseMapper { + + @Select("SELECT MAX(jobcode) " + + "FROM alarm_job " + + "WHERE JOBCODE like '${jobcode}%'") + String getJobCodeMaxSerial(@Param("jobcode") String jobcode); + +} diff --git a/src/main/java/com/casic/controller/DeviceDataController.java b/src/main/java/com/casic/controller/DeviceDataController.java index e5351c9..971b258 100644 --- a/src/main/java/com/casic/controller/DeviceDataController.java +++ b/src/main/java/com/casic/controller/DeviceDataController.java @@ -1,7 +1,6 @@ package com.casic.controller; import com.casic.model.DataReportParam; -import com.casic.model.HeartbeatParam; import com.casic.model.ResponseData; import com.casic.service.DeviceDataService; import org.springframework.web.bind.annotation.PostMapping; @@ -19,19 +18,9 @@ this.dataService = dataService; } - @PostMapping("/commit") - public ResponseData DeviceDataCommit(@RequestBody DataReportParam dataReportParam) { - return dataService.DeviceDataCommit(dataReportParam); - } - - @PostMapping("/heartbeat") - public ResponseData heartBeat(@RequestBody HeartbeatParam heartbeatParam) { - return dataService.heartBeatSave(heartbeatParam); - } - @PostMapping("/gas/receiver") - public ResponseData gasReceiver(@RequestBody HeartbeatParam heartbeatParam) { - return dataService.heartBeatSave(heartbeatParam); + public ResponseData gasReceiver(@RequestBody DataReportParam dataReportParam) { + return dataService.gasReceiver(dataReportParam); } } diff --git a/src/main/java/com/casic/dao/AlarmJobMapper.java b/src/main/java/com/casic/dao/AlarmJobMapper.java new file mode 100644 index 0000000..e5e9c8d --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmJobMapper.java @@ -0,0 +1,17 @@ +package com.casic.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.AlarmJob; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +@Mapper +public interface AlarmJobMapper extends BaseMapper { + + @Select("SELECT MAX(jobcode) " + + "FROM alarm_job " + + "WHERE JOBCODE like '${jobcode}%'") + String getJobCodeMaxSerial(@Param("jobcode") String jobcode); + +} diff --git a/src/main/java/com/casic/dao/AlarmRecordsMapper.java b/src/main/java/com/casic/dao/AlarmRecordsMapper.java new file mode 100644 index 0000000..8da7dcb --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -0,0 +1,28 @@ +package com.casic.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.AlarmRecords; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +@Mapper +public interface AlarmRecordsMapper extends BaseMapper { + + + @Select("SELECT JOB_ID AS \"jobId\"\n " + + "FROM alarm_records\n " + + "WHERE DEVCODE = #{devcode}\n " + + "AND ALARM_CONTENT = #{MsgContent}\n " + + "AND STATUS='1'\n " + + "AND JOB_ID>0 ") + String isOldAlarmRecord(@Param("devcode") String devcode, @Param("MsgContent") String MsgContent); + + @Update(" UPDATE alarm_records\n" + + " SET STATUS='0'\n" + + " WHERE DEVCODE = #{devcode}\n" + + " AND ALARM_CONTENT = #{MsgContent}\n" + + " AND STATUS='1'") + Integer updateOldAlarmRecord(@Param("devcode") String devcode, @Param("MsgContent") String MsgContent); +} diff --git a/src/main/java/com/casic/controller/DeviceDataController.java b/src/main/java/com/casic/controller/DeviceDataController.java index e5351c9..971b258 100644 --- a/src/main/java/com/casic/controller/DeviceDataController.java +++ b/src/main/java/com/casic/controller/DeviceDataController.java @@ -1,7 +1,6 @@ package com.casic.controller; import com.casic.model.DataReportParam; -import com.casic.model.HeartbeatParam; import com.casic.model.ResponseData; import com.casic.service.DeviceDataService; import org.springframework.web.bind.annotation.PostMapping; @@ -19,19 +18,9 @@ this.dataService = dataService; } - @PostMapping("/commit") - public ResponseData DeviceDataCommit(@RequestBody DataReportParam dataReportParam) { - return dataService.DeviceDataCommit(dataReportParam); - } - - @PostMapping("/heartbeat") - public ResponseData heartBeat(@RequestBody HeartbeatParam heartbeatParam) { - return dataService.heartBeatSave(heartbeatParam); - } - @PostMapping("/gas/receiver") - public ResponseData gasReceiver(@RequestBody HeartbeatParam heartbeatParam) { - return dataService.heartBeatSave(heartbeatParam); + public ResponseData gasReceiver(@RequestBody DataReportParam dataReportParam) { + return dataService.gasReceiver(dataReportParam); } } diff --git a/src/main/java/com/casic/dao/AlarmJobMapper.java b/src/main/java/com/casic/dao/AlarmJobMapper.java new file mode 100644 index 0000000..e5e9c8d --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmJobMapper.java @@ -0,0 +1,17 @@ +package com.casic.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.AlarmJob; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +@Mapper +public interface AlarmJobMapper extends BaseMapper { + + @Select("SELECT MAX(jobcode) " + + "FROM alarm_job " + + "WHERE JOBCODE like '${jobcode}%'") + String getJobCodeMaxSerial(@Param("jobcode") String jobcode); + +} diff --git a/src/main/java/com/casic/dao/AlarmRecordsMapper.java b/src/main/java/com/casic/dao/AlarmRecordsMapper.java new file mode 100644 index 0000000..8da7dcb --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -0,0 +1,28 @@ +package com.casic.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.AlarmRecords; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +@Mapper +public interface AlarmRecordsMapper extends BaseMapper { + + + @Select("SELECT JOB_ID AS \"jobId\"\n " + + "FROM alarm_records\n " + + "WHERE DEVCODE = #{devcode}\n " + + "AND ALARM_CONTENT = #{MsgContent}\n " + + "AND STATUS='1'\n " + + "AND JOB_ID>0 ") + String isOldAlarmRecord(@Param("devcode") String devcode, @Param("MsgContent") String MsgContent); + + @Update(" UPDATE alarm_records\n" + + " SET STATUS='0'\n" + + " WHERE DEVCODE = #{devcode}\n" + + " AND ALARM_CONTENT = #{MsgContent}\n" + + " AND STATUS='1'") + Integer updateOldAlarmRecord(@Param("devcode") String devcode, @Param("MsgContent") String MsgContent); +} diff --git a/src/main/java/com/casic/dao/DataGasMapper.java b/src/main/java/com/casic/dao/DataGasMapper.java index 47e7cce..6e08811 100644 --- a/src/main/java/com/casic/dao/DataGasMapper.java +++ b/src/main/java/com/casic/dao/DataGasMapper.java @@ -1,9 +1,41 @@ package com.casic.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.casic.entity.DataGasReport; +import com.casic.entity.DataGasDector; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +import java.util.List; +import java.util.Map; @Mapper -public interface DataGasMapper extends BaseMapper { +public interface DataGasMapper extends BaseMapper { + + @Select("select bd.id as \"deviceId\" " + + "from bus_device_well bdw " + + "join (select id from bus_device where devcode=#{devcode}) bd ON bd.id=bdw.device_id " + + "join bus_well_info bwi ON bwi.id=bdw.well_id ") + Map getWellCode(@Param("devcode") String devcode); + + @Update("UPDATE bus_device" + + "SET ONLINE_STATE=0" + + "WHERE devcode=#{devcode} ") + void setOfflineByDevcode(@Param("devcode") String devcode); + + @Select("SELECT level,high_value " + + "FROM alarm_level " + + "WHERE device_type=#{deviceType} ") + List> getAlarmLevelList(@Param("deviceType") String deviceType); + + @Select("SELECT devcode " + + "FROM data_gas_dector " + + "WHERE devcode=#{devcode} " + + "AND date_part('minute',now()-uptime) < ${minutes}" + + "ORDER BY uptime DESC " + + "LIMIT 1") + String getLastData(@Param("minutes") String minutes, + @Param("devcode") String devcode); + } diff --git a/src/main/java/com/casic/controller/DeviceDataController.java b/src/main/java/com/casic/controller/DeviceDataController.java index e5351c9..971b258 100644 --- a/src/main/java/com/casic/controller/DeviceDataController.java +++ b/src/main/java/com/casic/controller/DeviceDataController.java @@ -1,7 +1,6 @@ package com.casic.controller; import com.casic.model.DataReportParam; -import com.casic.model.HeartbeatParam; import com.casic.model.ResponseData; import com.casic.service.DeviceDataService; import org.springframework.web.bind.annotation.PostMapping; @@ -19,19 +18,9 @@ this.dataService = dataService; } - @PostMapping("/commit") - public ResponseData DeviceDataCommit(@RequestBody DataReportParam dataReportParam) { - return dataService.DeviceDataCommit(dataReportParam); - } - - @PostMapping("/heartbeat") - public ResponseData heartBeat(@RequestBody HeartbeatParam heartbeatParam) { - return dataService.heartBeatSave(heartbeatParam); - } - @PostMapping("/gas/receiver") - public ResponseData gasReceiver(@RequestBody HeartbeatParam heartbeatParam) { - return dataService.heartBeatSave(heartbeatParam); + public ResponseData gasReceiver(@RequestBody DataReportParam dataReportParam) { + return dataService.gasReceiver(dataReportParam); } } diff --git a/src/main/java/com/casic/dao/AlarmJobMapper.java b/src/main/java/com/casic/dao/AlarmJobMapper.java new file mode 100644 index 0000000..e5e9c8d --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmJobMapper.java @@ -0,0 +1,17 @@ +package com.casic.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.AlarmJob; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +@Mapper +public interface AlarmJobMapper extends BaseMapper { + + @Select("SELECT MAX(jobcode) " + + "FROM alarm_job " + + "WHERE JOBCODE like '${jobcode}%'") + String getJobCodeMaxSerial(@Param("jobcode") String jobcode); + +} diff --git a/src/main/java/com/casic/dao/AlarmRecordsMapper.java b/src/main/java/com/casic/dao/AlarmRecordsMapper.java new file mode 100644 index 0000000..8da7dcb --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -0,0 +1,28 @@ +package com.casic.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.AlarmRecords; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +@Mapper +public interface AlarmRecordsMapper extends BaseMapper { + + + @Select("SELECT JOB_ID AS \"jobId\"\n " + + "FROM alarm_records\n " + + "WHERE DEVCODE = #{devcode}\n " + + "AND ALARM_CONTENT = #{MsgContent}\n " + + "AND STATUS='1'\n " + + "AND JOB_ID>0 ") + String isOldAlarmRecord(@Param("devcode") String devcode, @Param("MsgContent") String MsgContent); + + @Update(" UPDATE alarm_records\n" + + " SET STATUS='0'\n" + + " WHERE DEVCODE = #{devcode}\n" + + " AND ALARM_CONTENT = #{MsgContent}\n" + + " AND STATUS='1'") + Integer updateOldAlarmRecord(@Param("devcode") String devcode, @Param("MsgContent") String MsgContent); +} diff --git a/src/main/java/com/casic/dao/DataGasMapper.java b/src/main/java/com/casic/dao/DataGasMapper.java index 47e7cce..6e08811 100644 --- a/src/main/java/com/casic/dao/DataGasMapper.java +++ b/src/main/java/com/casic/dao/DataGasMapper.java @@ -1,9 +1,41 @@ package com.casic.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.casic.entity.DataGasReport; +import com.casic.entity.DataGasDector; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +import java.util.List; +import java.util.Map; @Mapper -public interface DataGasMapper extends BaseMapper { +public interface DataGasMapper extends BaseMapper { + + @Select("select bd.id as \"deviceId\" " + + "from bus_device_well bdw " + + "join (select id from bus_device where devcode=#{devcode}) bd ON bd.id=bdw.device_id " + + "join bus_well_info bwi ON bwi.id=bdw.well_id ") + Map getWellCode(@Param("devcode") String devcode); + + @Update("UPDATE bus_device" + + "SET ONLINE_STATE=0" + + "WHERE devcode=#{devcode} ") + void setOfflineByDevcode(@Param("devcode") String devcode); + + @Select("SELECT level,high_value " + + "FROM alarm_level " + + "WHERE device_type=#{deviceType} ") + List> getAlarmLevelList(@Param("deviceType") String deviceType); + + @Select("SELECT devcode " + + "FROM data_gas_dector " + + "WHERE devcode=#{devcode} " + + "AND date_part('minute',now()-uptime) < ${minutes}" + + "ORDER BY uptime DESC " + + "LIMIT 1") + String getLastData(@Param("minutes") String minutes, + @Param("devcode") String devcode); + } diff --git a/src/main/java/com/casic/dao/impl/AlarmJobDao.java b/src/main/java/com/casic/dao/impl/AlarmJobDao.java new file mode 100644 index 0000000..3a2a424 --- /dev/null +++ b/src/main/java/com/casic/dao/impl/AlarmJobDao.java @@ -0,0 +1,54 @@ +package com.casic.dao.impl; + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.AlarmJobMapper; +import com.casic.entity.AlarmJob; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Component +public class AlarmJobDao { + + public static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyyMMdd"); + + @Resource + private AlarmJobMapper alarmJobMapper; + + public AlarmJob saveData(String devCode, String wellCode, String devTypeName, String jobType) { + AlarmJob alarmJob = new AlarmJob(); + alarmJob.setDevcode(devCode); + alarmJob.setWellCode(wellCode); + alarmJob.setJobStatus("0"); + alarmJob.setCreateTime(new Date()); + alarmJob.setJobcode(this.produceJobCode(devTypeName)); + alarmJob.setJobType(jobType); + alarmJobMapper.insert(alarmJob); + return alarmJob; + } + + /** + * 前缀+日期+4位流水号 + * + * @param devTypeName + * @return + */ + private String produceJobCode(String devTypeName) { + String pre = devTypeName; + String dataStr = sdf6.format(new Date()); + String fix = this.getJobCodeMaxSerial(pre + dataStr); + return StringUtils.isEmpty(fix) ? pre + dataStr + String.format("%04d", Long.valueOf(fix) + 1L) : pre + dataStr + "0001"; + } + + + private String getJobCodeMaxSerial(String jobcode) { + String MaxSerialJobCode = alarmJobMapper.getJobCodeMaxSerial(jobcode); + String fix = ""; + if (null != MaxSerialJobCode && MaxSerialJobCode.length() > 4) { + fix = MaxSerialJobCode.substring(MaxSerialJobCode.length() - 4); + } + return fix; + } +} diff --git a/src/main/java/com/casic/controller/DeviceDataController.java b/src/main/java/com/casic/controller/DeviceDataController.java index e5351c9..971b258 100644 --- a/src/main/java/com/casic/controller/DeviceDataController.java +++ b/src/main/java/com/casic/controller/DeviceDataController.java @@ -1,7 +1,6 @@ package com.casic.controller; import com.casic.model.DataReportParam; -import com.casic.model.HeartbeatParam; import com.casic.model.ResponseData; import com.casic.service.DeviceDataService; import org.springframework.web.bind.annotation.PostMapping; @@ -19,19 +18,9 @@ this.dataService = dataService; } - @PostMapping("/commit") - public ResponseData DeviceDataCommit(@RequestBody DataReportParam dataReportParam) { - return dataService.DeviceDataCommit(dataReportParam); - } - - @PostMapping("/heartbeat") - public ResponseData heartBeat(@RequestBody HeartbeatParam heartbeatParam) { - return dataService.heartBeatSave(heartbeatParam); - } - @PostMapping("/gas/receiver") - public ResponseData gasReceiver(@RequestBody HeartbeatParam heartbeatParam) { - return dataService.heartBeatSave(heartbeatParam); + public ResponseData gasReceiver(@RequestBody DataReportParam dataReportParam) { + return dataService.gasReceiver(dataReportParam); } } diff --git a/src/main/java/com/casic/dao/AlarmJobMapper.java b/src/main/java/com/casic/dao/AlarmJobMapper.java new file mode 100644 index 0000000..e5e9c8d --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmJobMapper.java @@ -0,0 +1,17 @@ +package com.casic.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.AlarmJob; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +@Mapper +public interface AlarmJobMapper extends BaseMapper { + + @Select("SELECT MAX(jobcode) " + + "FROM alarm_job " + + "WHERE JOBCODE like '${jobcode}%'") + String getJobCodeMaxSerial(@Param("jobcode") String jobcode); + +} diff --git a/src/main/java/com/casic/dao/AlarmRecordsMapper.java b/src/main/java/com/casic/dao/AlarmRecordsMapper.java new file mode 100644 index 0000000..8da7dcb --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -0,0 +1,28 @@ +package com.casic.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.AlarmRecords; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +@Mapper +public interface AlarmRecordsMapper extends BaseMapper { + + + @Select("SELECT JOB_ID AS \"jobId\"\n " + + "FROM alarm_records\n " + + "WHERE DEVCODE = #{devcode}\n " + + "AND ALARM_CONTENT = #{MsgContent}\n " + + "AND STATUS='1'\n " + + "AND JOB_ID>0 ") + String isOldAlarmRecord(@Param("devcode") String devcode, @Param("MsgContent") String MsgContent); + + @Update(" UPDATE alarm_records\n" + + " SET STATUS='0'\n" + + " WHERE DEVCODE = #{devcode}\n" + + " AND ALARM_CONTENT = #{MsgContent}\n" + + " AND STATUS='1'") + Integer updateOldAlarmRecord(@Param("devcode") String devcode, @Param("MsgContent") String MsgContent); +} diff --git a/src/main/java/com/casic/dao/DataGasMapper.java b/src/main/java/com/casic/dao/DataGasMapper.java index 47e7cce..6e08811 100644 --- a/src/main/java/com/casic/dao/DataGasMapper.java +++ b/src/main/java/com/casic/dao/DataGasMapper.java @@ -1,9 +1,41 @@ package com.casic.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.casic.entity.DataGasReport; +import com.casic.entity.DataGasDector; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +import java.util.List; +import java.util.Map; @Mapper -public interface DataGasMapper extends BaseMapper { +public interface DataGasMapper extends BaseMapper { + + @Select("select bd.id as \"deviceId\" " + + "from bus_device_well bdw " + + "join (select id from bus_device where devcode=#{devcode}) bd ON bd.id=bdw.device_id " + + "join bus_well_info bwi ON bwi.id=bdw.well_id ") + Map getWellCode(@Param("devcode") String devcode); + + @Update("UPDATE bus_device" + + "SET ONLINE_STATE=0" + + "WHERE devcode=#{devcode} ") + void setOfflineByDevcode(@Param("devcode") String devcode); + + @Select("SELECT level,high_value " + + "FROM alarm_level " + + "WHERE device_type=#{deviceType} ") + List> getAlarmLevelList(@Param("deviceType") String deviceType); + + @Select("SELECT devcode " + + "FROM data_gas_dector " + + "WHERE devcode=#{devcode} " + + "AND date_part('minute',now()-uptime) < ${minutes}" + + "ORDER BY uptime DESC " + + "LIMIT 1") + String getLastData(@Param("minutes") String minutes, + @Param("devcode") String devcode); + } diff --git a/src/main/java/com/casic/dao/impl/AlarmJobDao.java b/src/main/java/com/casic/dao/impl/AlarmJobDao.java new file mode 100644 index 0000000..3a2a424 --- /dev/null +++ b/src/main/java/com/casic/dao/impl/AlarmJobDao.java @@ -0,0 +1,54 @@ +package com.casic.dao.impl; + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.AlarmJobMapper; +import com.casic.entity.AlarmJob; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Component +public class AlarmJobDao { + + public static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyyMMdd"); + + @Resource + private AlarmJobMapper alarmJobMapper; + + public AlarmJob saveData(String devCode, String wellCode, String devTypeName, String jobType) { + AlarmJob alarmJob = new AlarmJob(); + alarmJob.setDevcode(devCode); + alarmJob.setWellCode(wellCode); + alarmJob.setJobStatus("0"); + alarmJob.setCreateTime(new Date()); + alarmJob.setJobcode(this.produceJobCode(devTypeName)); + alarmJob.setJobType(jobType); + alarmJobMapper.insert(alarmJob); + return alarmJob; + } + + /** + * 前缀+日期+4位流水号 + * + * @param devTypeName + * @return + */ + private String produceJobCode(String devTypeName) { + String pre = devTypeName; + String dataStr = sdf6.format(new Date()); + String fix = this.getJobCodeMaxSerial(pre + dataStr); + return StringUtils.isEmpty(fix) ? pre + dataStr + String.format("%04d", Long.valueOf(fix) + 1L) : pre + dataStr + "0001"; + } + + + private String getJobCodeMaxSerial(String jobcode) { + String MaxSerialJobCode = alarmJobMapper.getJobCodeMaxSerial(jobcode); + String fix = ""; + if (null != MaxSerialJobCode && MaxSerialJobCode.length() > 4) { + fix = MaxSerialJobCode.substring(MaxSerialJobCode.length() - 4); + } + return fix; + } +} diff --git a/src/main/java/com/casic/dao/impl/DeviceDataMapper.java b/src/main/java/com/casic/dao/impl/DeviceDataMapper.java deleted file mode 100644 index c797e55..0000000 --- a/src/main/java/com/casic/dao/impl/DeviceDataMapper.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.casic.dao.impl; - -import com.alibaba.fastjson.JSON; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; -import com.casic.dao.DataGasMapper; -import com.casic.entity.DataGasReport; -import com.casic.model.DataReportParam; -import com.casic.model.HeartbeatParam; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import javax.management.Query; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.time.DateTimeException; -import java.util.*; - -@Slf4j -@Component -public class DeviceDataMapper { - @Autowired - DataGasMapper dataGasMapper; - - public int addDeviceData(DataReportParam dataReportParam) { - DataGasReport dataGasReport = new DataGasReport(); - dataGasReport.setImei(dataReportParam.getIMEI()); - dataGasReport.setImsi(dataReportParam.getIMSI()); - try { - dataGasReport.setUptime(new Date(Long.valueOf(dataReportParam.getTimestamp()))); - } catch (DateTimeException dex) { - log.error("主题,日期转换出错,时间戳为{},异常信息为{}", dataReportParam.getTimestamp(), dex); - } - dataGasReport.setGasSampleValue(dataReportParam.getPayload().get("gas_sensor_state").toString()); - dataGasReport.setGasSensorState(dataReportParam.getPayload().get("gas_sample_value").toString()); - dataGasReport.setLogtime(new Date()); - return dataGasMapper.insert(dataGasReport); - } - - public int editDeviceData(HeartbeatParam heartbeatParam) { - DataGasReport dataGasReport = new DataGasReport(); - dataGasReport.setImei(heartbeatParam.getIMEI()); - dataGasReport.setImsi(heartbeatParam.getIMSI()); - //电池电压-电池点亮 - dataGasReport.setBatteryVoltage(heartbeatParam.getBattery_voltage()); - dataGasReport.setBatteryValue(heartbeatParam.getBattery_value()); - // - dataGasReport.setCellId(heartbeatParam.getCell_id()); - dataGasReport.setIccid(heartbeatParam.getICCID()); - //噪音、接收功率、小区标识 - dataGasReport.setPci(heartbeatParam.getPci()); - dataGasReport.setRsrp(heartbeatParam.getRsrp()); - dataGasReport.setSinr(heartbeatParam.getSinr()); - dataGasReport.setHeartbeatTime(heartbeatParam.getHeartbeat_time()); - QueryWrapper queryWrapper = new QueryWrapper() - .eq("DEVCODE", heartbeatParam.getIMEI()) - .orderByDesc("LOGTIME").last("limit 1"); - List dataGasReportList = dataGasMapper.selectList(queryWrapper); - if (dataGasReportList.size() == 0) { - return 0; - } else { - dataGasReport.setId(dataGasReportList.get(0).getId()); - } - return dataGasMapper.updateById(dataGasReport); - } - -} diff --git a/src/main/java/com/casic/controller/DeviceDataController.java b/src/main/java/com/casic/controller/DeviceDataController.java index e5351c9..971b258 100644 --- a/src/main/java/com/casic/controller/DeviceDataController.java +++ b/src/main/java/com/casic/controller/DeviceDataController.java @@ -1,7 +1,6 @@ package com.casic.controller; import com.casic.model.DataReportParam; -import com.casic.model.HeartbeatParam; import com.casic.model.ResponseData; import com.casic.service.DeviceDataService; import org.springframework.web.bind.annotation.PostMapping; @@ -19,19 +18,9 @@ this.dataService = dataService; } - @PostMapping("/commit") - public ResponseData DeviceDataCommit(@RequestBody DataReportParam dataReportParam) { - return dataService.DeviceDataCommit(dataReportParam); - } - - @PostMapping("/heartbeat") - public ResponseData heartBeat(@RequestBody HeartbeatParam heartbeatParam) { - return dataService.heartBeatSave(heartbeatParam); - } - @PostMapping("/gas/receiver") - public ResponseData gasReceiver(@RequestBody HeartbeatParam heartbeatParam) { - return dataService.heartBeatSave(heartbeatParam); + public ResponseData gasReceiver(@RequestBody DataReportParam dataReportParam) { + return dataService.gasReceiver(dataReportParam); } } diff --git a/src/main/java/com/casic/dao/AlarmJobMapper.java b/src/main/java/com/casic/dao/AlarmJobMapper.java new file mode 100644 index 0000000..e5e9c8d --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmJobMapper.java @@ -0,0 +1,17 @@ +package com.casic.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.AlarmJob; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +@Mapper +public interface AlarmJobMapper extends BaseMapper { + + @Select("SELECT MAX(jobcode) " + + "FROM alarm_job " + + "WHERE JOBCODE like '${jobcode}%'") + String getJobCodeMaxSerial(@Param("jobcode") String jobcode); + +} diff --git a/src/main/java/com/casic/dao/AlarmRecordsMapper.java b/src/main/java/com/casic/dao/AlarmRecordsMapper.java new file mode 100644 index 0000000..8da7dcb --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -0,0 +1,28 @@ +package com.casic.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.AlarmRecords; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +@Mapper +public interface AlarmRecordsMapper extends BaseMapper { + + + @Select("SELECT JOB_ID AS \"jobId\"\n " + + "FROM alarm_records\n " + + "WHERE DEVCODE = #{devcode}\n " + + "AND ALARM_CONTENT = #{MsgContent}\n " + + "AND STATUS='1'\n " + + "AND JOB_ID>0 ") + String isOldAlarmRecord(@Param("devcode") String devcode, @Param("MsgContent") String MsgContent); + + @Update(" UPDATE alarm_records\n" + + " SET STATUS='0'\n" + + " WHERE DEVCODE = #{devcode}\n" + + " AND ALARM_CONTENT = #{MsgContent}\n" + + " AND STATUS='1'") + Integer updateOldAlarmRecord(@Param("devcode") String devcode, @Param("MsgContent") String MsgContent); +} diff --git a/src/main/java/com/casic/dao/DataGasMapper.java b/src/main/java/com/casic/dao/DataGasMapper.java index 47e7cce..6e08811 100644 --- a/src/main/java/com/casic/dao/DataGasMapper.java +++ b/src/main/java/com/casic/dao/DataGasMapper.java @@ -1,9 +1,41 @@ package com.casic.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.casic.entity.DataGasReport; +import com.casic.entity.DataGasDector; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +import java.util.List; +import java.util.Map; @Mapper -public interface DataGasMapper extends BaseMapper { +public interface DataGasMapper extends BaseMapper { + + @Select("select bd.id as \"deviceId\" " + + "from bus_device_well bdw " + + "join (select id from bus_device where devcode=#{devcode}) bd ON bd.id=bdw.device_id " + + "join bus_well_info bwi ON bwi.id=bdw.well_id ") + Map getWellCode(@Param("devcode") String devcode); + + @Update("UPDATE bus_device" + + "SET ONLINE_STATE=0" + + "WHERE devcode=#{devcode} ") + void setOfflineByDevcode(@Param("devcode") String devcode); + + @Select("SELECT level,high_value " + + "FROM alarm_level " + + "WHERE device_type=#{deviceType} ") + List> getAlarmLevelList(@Param("deviceType") String deviceType); + + @Select("SELECT devcode " + + "FROM data_gas_dector " + + "WHERE devcode=#{devcode} " + + "AND date_part('minute',now()-uptime) < ${minutes}" + + "ORDER BY uptime DESC " + + "LIMIT 1") + String getLastData(@Param("minutes") String minutes, + @Param("devcode") String devcode); + } diff --git a/src/main/java/com/casic/dao/impl/AlarmJobDao.java b/src/main/java/com/casic/dao/impl/AlarmJobDao.java new file mode 100644 index 0000000..3a2a424 --- /dev/null +++ b/src/main/java/com/casic/dao/impl/AlarmJobDao.java @@ -0,0 +1,54 @@ +package com.casic.dao.impl; + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.AlarmJobMapper; +import com.casic.entity.AlarmJob; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Component +public class AlarmJobDao { + + public static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyyMMdd"); + + @Resource + private AlarmJobMapper alarmJobMapper; + + public AlarmJob saveData(String devCode, String wellCode, String devTypeName, String jobType) { + AlarmJob alarmJob = new AlarmJob(); + alarmJob.setDevcode(devCode); + alarmJob.setWellCode(wellCode); + alarmJob.setJobStatus("0"); + alarmJob.setCreateTime(new Date()); + alarmJob.setJobcode(this.produceJobCode(devTypeName)); + alarmJob.setJobType(jobType); + alarmJobMapper.insert(alarmJob); + return alarmJob; + } + + /** + * 前缀+日期+4位流水号 + * + * @param devTypeName + * @return + */ + private String produceJobCode(String devTypeName) { + String pre = devTypeName; + String dataStr = sdf6.format(new Date()); + String fix = this.getJobCodeMaxSerial(pre + dataStr); + return StringUtils.isEmpty(fix) ? pre + dataStr + String.format("%04d", Long.valueOf(fix) + 1L) : pre + dataStr + "0001"; + } + + + private String getJobCodeMaxSerial(String jobcode) { + String MaxSerialJobCode = alarmJobMapper.getJobCodeMaxSerial(jobcode); + String fix = ""; + if (null != MaxSerialJobCode && MaxSerialJobCode.length() > 4) { + fix = MaxSerialJobCode.substring(MaxSerialJobCode.length() - 4); + } + return fix; + } +} diff --git a/src/main/java/com/casic/dao/impl/DeviceDataMapper.java b/src/main/java/com/casic/dao/impl/DeviceDataMapper.java deleted file mode 100644 index c797e55..0000000 --- a/src/main/java/com/casic/dao/impl/DeviceDataMapper.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.casic.dao.impl; - -import com.alibaba.fastjson.JSON; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; -import com.casic.dao.DataGasMapper; -import com.casic.entity.DataGasReport; -import com.casic.model.DataReportParam; -import com.casic.model.HeartbeatParam; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import javax.management.Query; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.time.DateTimeException; -import java.util.*; - -@Slf4j -@Component -public class DeviceDataMapper { - @Autowired - DataGasMapper dataGasMapper; - - public int addDeviceData(DataReportParam dataReportParam) { - DataGasReport dataGasReport = new DataGasReport(); - dataGasReport.setImei(dataReportParam.getIMEI()); - dataGasReport.setImsi(dataReportParam.getIMSI()); - try { - dataGasReport.setUptime(new Date(Long.valueOf(dataReportParam.getTimestamp()))); - } catch (DateTimeException dex) { - log.error("主题,日期转换出错,时间戳为{},异常信息为{}", dataReportParam.getTimestamp(), dex); - } - dataGasReport.setGasSampleValue(dataReportParam.getPayload().get("gas_sensor_state").toString()); - dataGasReport.setGasSensorState(dataReportParam.getPayload().get("gas_sample_value").toString()); - dataGasReport.setLogtime(new Date()); - return dataGasMapper.insert(dataGasReport); - } - - public int editDeviceData(HeartbeatParam heartbeatParam) { - DataGasReport dataGasReport = new DataGasReport(); - dataGasReport.setImei(heartbeatParam.getIMEI()); - dataGasReport.setImsi(heartbeatParam.getIMSI()); - //电池电压-电池点亮 - dataGasReport.setBatteryVoltage(heartbeatParam.getBattery_voltage()); - dataGasReport.setBatteryValue(heartbeatParam.getBattery_value()); - // - dataGasReport.setCellId(heartbeatParam.getCell_id()); - dataGasReport.setIccid(heartbeatParam.getICCID()); - //噪音、接收功率、小区标识 - dataGasReport.setPci(heartbeatParam.getPci()); - dataGasReport.setRsrp(heartbeatParam.getRsrp()); - dataGasReport.setSinr(heartbeatParam.getSinr()); - dataGasReport.setHeartbeatTime(heartbeatParam.getHeartbeat_time()); - QueryWrapper queryWrapper = new QueryWrapper() - .eq("DEVCODE", heartbeatParam.getIMEI()) - .orderByDesc("LOGTIME").last("limit 1"); - List dataGasReportList = dataGasMapper.selectList(queryWrapper); - if (dataGasReportList.size() == 0) { - return 0; - } else { - dataGasReport.setId(dataGasReportList.get(0).getId()); - } - return dataGasMapper.updateById(dataGasReport); - } - -} diff --git a/src/main/java/com/casic/entity/AlarmJob.java b/src/main/java/com/casic/entity/AlarmJob.java new file mode 100644 index 0000000..65a6096 --- /dev/null +++ b/src/main/java/com/casic/entity/AlarmJob.java @@ -0,0 +1,165 @@ +package com.casic.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 报警工单表 + *

+ * + * @author casic123 + * @since 2019-05-17 + */ +@Data +@TableName("alarm_job") +public class AlarmJob extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.AUTO) + private Long id; + /** + * 工单编号 + */ + @TableField("JOBCODE") + private String jobcode; + /** + * 工单类型 + */ + @TableField("JOG_TYPE") + private String jobType; + /** + * 井编号 + */ + @TableField("WELL_CODE") + private String wellCode; + /** + * 设备编号 + */ + @TableField("DEVCODE") + private String devcode; + /** + * 工单创建时间 + */ + @TableField("CREATE_TIME") + private Date createTime; + /** + * 工单状态(0待处理,1待确认,2处理中,3完成) + */ + @TableField("JOB_STATUS") + private String jobStatus; + /** + * 接单人员 + */ + @TableField("GET_JOB_PERSON") + private Long getJobPerson; + /** + * 接单时间 + */ + @TableField("GET_JOB_TIME") + private Date getJobTime; + /** + * 应接单时间 + */ + @TableField("SHOULD_GET_TIME") + private Date shouldGetTime; + /** + * 第一现场情况 + */ + @TableField("FIRST_STATE") + private String firstState; + /** + * 第一现场照片 + */ + @TableField("FIRST_STATE_PHOTOS") + private String firstStatePhotos; + /** + * 确认人员 + */ + @TableField("CONFIRM_JOB_PERSON") + private Long confirmJobPerson; + /** + * 确认时间 + */ + @TableField("CONFRIM_JOB_TIME") + private Date confrimJobTime; + /** + * 处理人员 + */ + @TableField("HANDLE_JOB_Person") + private Long handleJobPerson; + /** + * 处理时间 + */ + @TableField("HANDLE_JOB_TIME") + private Date handleJobTime; + /** + * 维护情况记录 + */ + @TableField("HANDLE_MESSAGE") + private String handleMessage; + /** + * 维护图片 + */ + @TableField("HANDLE_PHOTOS") + private String handlePhotos; + /** + * 工单流转记录 + */ + @TableField("FLOW") + private String flow; + + @TableField("JOB_BELONG_TO") + private Long jobBelongTo; + + @TableField("JOB_FLAG_DELAY") + private String jobFlagDelay; + + @TableField("JOB_FLAG_1") + private String jobFlag1; + + @TableField(exist = false) + private String alarmValue; + + @TableField(exist = false) + private String alarmContentName; + + @TableField(exist = false) + private Integer recordId; + + @Override + public String toString() { + return "AlarmJob{" + + "id=" + id + + ", jobcode=" + jobcode + + ", jogType=" + jobType + + ", wellCode=" + wellCode + + ", devcode=" + devcode + + ", createTime=" + createTime + + ", jobStatus=" + jobStatus + + ", getJobPerson=" + getJobPerson + + ", getJobTime=" + getJobTime + + ", firstState=" + firstState + + ", firstStatePhotos=" + firstStatePhotos + + ", confirmJobPerson=" + confirmJobPerson + + ", confrimJobTime=" + confrimJobTime + + ", handleJobPerson=" + handleJobPerson + + ", handleJobTime=" + handleJobTime + + ", handleMessage=" + handleMessage + + ", handlePhotos=" + handlePhotos + + ", flow=" + flow + + ", recordId=" + recordId + + "}"; + } +} diff --git a/src/main/java/com/casic/controller/DeviceDataController.java b/src/main/java/com/casic/controller/DeviceDataController.java index e5351c9..971b258 100644 --- a/src/main/java/com/casic/controller/DeviceDataController.java +++ b/src/main/java/com/casic/controller/DeviceDataController.java @@ -1,7 +1,6 @@ package com.casic.controller; import com.casic.model.DataReportParam; -import com.casic.model.HeartbeatParam; import com.casic.model.ResponseData; import com.casic.service.DeviceDataService; import org.springframework.web.bind.annotation.PostMapping; @@ -19,19 +18,9 @@ this.dataService = dataService; } - @PostMapping("/commit") - public ResponseData DeviceDataCommit(@RequestBody DataReportParam dataReportParam) { - return dataService.DeviceDataCommit(dataReportParam); - } - - @PostMapping("/heartbeat") - public ResponseData heartBeat(@RequestBody HeartbeatParam heartbeatParam) { - return dataService.heartBeatSave(heartbeatParam); - } - @PostMapping("/gas/receiver") - public ResponseData gasReceiver(@RequestBody HeartbeatParam heartbeatParam) { - return dataService.heartBeatSave(heartbeatParam); + public ResponseData gasReceiver(@RequestBody DataReportParam dataReportParam) { + return dataService.gasReceiver(dataReportParam); } } diff --git a/src/main/java/com/casic/dao/AlarmJobMapper.java b/src/main/java/com/casic/dao/AlarmJobMapper.java new file mode 100644 index 0000000..e5e9c8d --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmJobMapper.java @@ -0,0 +1,17 @@ +package com.casic.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.AlarmJob; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +@Mapper +public interface AlarmJobMapper extends BaseMapper { + + @Select("SELECT MAX(jobcode) " + + "FROM alarm_job " + + "WHERE JOBCODE like '${jobcode}%'") + String getJobCodeMaxSerial(@Param("jobcode") String jobcode); + +} diff --git a/src/main/java/com/casic/dao/AlarmRecordsMapper.java b/src/main/java/com/casic/dao/AlarmRecordsMapper.java new file mode 100644 index 0000000..8da7dcb --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -0,0 +1,28 @@ +package com.casic.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.AlarmRecords; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +@Mapper +public interface AlarmRecordsMapper extends BaseMapper { + + + @Select("SELECT JOB_ID AS \"jobId\"\n " + + "FROM alarm_records\n " + + "WHERE DEVCODE = #{devcode}\n " + + "AND ALARM_CONTENT = #{MsgContent}\n " + + "AND STATUS='1'\n " + + "AND JOB_ID>0 ") + String isOldAlarmRecord(@Param("devcode") String devcode, @Param("MsgContent") String MsgContent); + + @Update(" UPDATE alarm_records\n" + + " SET STATUS='0'\n" + + " WHERE DEVCODE = #{devcode}\n" + + " AND ALARM_CONTENT = #{MsgContent}\n" + + " AND STATUS='1'") + Integer updateOldAlarmRecord(@Param("devcode") String devcode, @Param("MsgContent") String MsgContent); +} diff --git a/src/main/java/com/casic/dao/DataGasMapper.java b/src/main/java/com/casic/dao/DataGasMapper.java index 47e7cce..6e08811 100644 --- a/src/main/java/com/casic/dao/DataGasMapper.java +++ b/src/main/java/com/casic/dao/DataGasMapper.java @@ -1,9 +1,41 @@ package com.casic.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.casic.entity.DataGasReport; +import com.casic.entity.DataGasDector; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +import java.util.List; +import java.util.Map; @Mapper -public interface DataGasMapper extends BaseMapper { +public interface DataGasMapper extends BaseMapper { + + @Select("select bd.id as \"deviceId\" " + + "from bus_device_well bdw " + + "join (select id from bus_device where devcode=#{devcode}) bd ON bd.id=bdw.device_id " + + "join bus_well_info bwi ON bwi.id=bdw.well_id ") + Map getWellCode(@Param("devcode") String devcode); + + @Update("UPDATE bus_device" + + "SET ONLINE_STATE=0" + + "WHERE devcode=#{devcode} ") + void setOfflineByDevcode(@Param("devcode") String devcode); + + @Select("SELECT level,high_value " + + "FROM alarm_level " + + "WHERE device_type=#{deviceType} ") + List> getAlarmLevelList(@Param("deviceType") String deviceType); + + @Select("SELECT devcode " + + "FROM data_gas_dector " + + "WHERE devcode=#{devcode} " + + "AND date_part('minute',now()-uptime) < ${minutes}" + + "ORDER BY uptime DESC " + + "LIMIT 1") + String getLastData(@Param("minutes") String minutes, + @Param("devcode") String devcode); + } diff --git a/src/main/java/com/casic/dao/impl/AlarmJobDao.java b/src/main/java/com/casic/dao/impl/AlarmJobDao.java new file mode 100644 index 0000000..3a2a424 --- /dev/null +++ b/src/main/java/com/casic/dao/impl/AlarmJobDao.java @@ -0,0 +1,54 @@ +package com.casic.dao.impl; + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.AlarmJobMapper; +import com.casic.entity.AlarmJob; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Component +public class AlarmJobDao { + + public static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyyMMdd"); + + @Resource + private AlarmJobMapper alarmJobMapper; + + public AlarmJob saveData(String devCode, String wellCode, String devTypeName, String jobType) { + AlarmJob alarmJob = new AlarmJob(); + alarmJob.setDevcode(devCode); + alarmJob.setWellCode(wellCode); + alarmJob.setJobStatus("0"); + alarmJob.setCreateTime(new Date()); + alarmJob.setJobcode(this.produceJobCode(devTypeName)); + alarmJob.setJobType(jobType); + alarmJobMapper.insert(alarmJob); + return alarmJob; + } + + /** + * 前缀+日期+4位流水号 + * + * @param devTypeName + * @return + */ + private String produceJobCode(String devTypeName) { + String pre = devTypeName; + String dataStr = sdf6.format(new Date()); + String fix = this.getJobCodeMaxSerial(pre + dataStr); + return StringUtils.isEmpty(fix) ? pre + dataStr + String.format("%04d", Long.valueOf(fix) + 1L) : pre + dataStr + "0001"; + } + + + private String getJobCodeMaxSerial(String jobcode) { + String MaxSerialJobCode = alarmJobMapper.getJobCodeMaxSerial(jobcode); + String fix = ""; + if (null != MaxSerialJobCode && MaxSerialJobCode.length() > 4) { + fix = MaxSerialJobCode.substring(MaxSerialJobCode.length() - 4); + } + return fix; + } +} diff --git a/src/main/java/com/casic/dao/impl/DeviceDataMapper.java b/src/main/java/com/casic/dao/impl/DeviceDataMapper.java deleted file mode 100644 index c797e55..0000000 --- a/src/main/java/com/casic/dao/impl/DeviceDataMapper.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.casic.dao.impl; - -import com.alibaba.fastjson.JSON; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; -import com.casic.dao.DataGasMapper; -import com.casic.entity.DataGasReport; -import com.casic.model.DataReportParam; -import com.casic.model.HeartbeatParam; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import javax.management.Query; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.time.DateTimeException; -import java.util.*; - -@Slf4j -@Component -public class DeviceDataMapper { - @Autowired - DataGasMapper dataGasMapper; - - public int addDeviceData(DataReportParam dataReportParam) { - DataGasReport dataGasReport = new DataGasReport(); - dataGasReport.setImei(dataReportParam.getIMEI()); - dataGasReport.setImsi(dataReportParam.getIMSI()); - try { - dataGasReport.setUptime(new Date(Long.valueOf(dataReportParam.getTimestamp()))); - } catch (DateTimeException dex) { - log.error("主题,日期转换出错,时间戳为{},异常信息为{}", dataReportParam.getTimestamp(), dex); - } - dataGasReport.setGasSampleValue(dataReportParam.getPayload().get("gas_sensor_state").toString()); - dataGasReport.setGasSensorState(dataReportParam.getPayload().get("gas_sample_value").toString()); - dataGasReport.setLogtime(new Date()); - return dataGasMapper.insert(dataGasReport); - } - - public int editDeviceData(HeartbeatParam heartbeatParam) { - DataGasReport dataGasReport = new DataGasReport(); - dataGasReport.setImei(heartbeatParam.getIMEI()); - dataGasReport.setImsi(heartbeatParam.getIMSI()); - //电池电压-电池点亮 - dataGasReport.setBatteryVoltage(heartbeatParam.getBattery_voltage()); - dataGasReport.setBatteryValue(heartbeatParam.getBattery_value()); - // - dataGasReport.setCellId(heartbeatParam.getCell_id()); - dataGasReport.setIccid(heartbeatParam.getICCID()); - //噪音、接收功率、小区标识 - dataGasReport.setPci(heartbeatParam.getPci()); - dataGasReport.setRsrp(heartbeatParam.getRsrp()); - dataGasReport.setSinr(heartbeatParam.getSinr()); - dataGasReport.setHeartbeatTime(heartbeatParam.getHeartbeat_time()); - QueryWrapper queryWrapper = new QueryWrapper() - .eq("DEVCODE", heartbeatParam.getIMEI()) - .orderByDesc("LOGTIME").last("limit 1"); - List dataGasReportList = dataGasMapper.selectList(queryWrapper); - if (dataGasReportList.size() == 0) { - return 0; - } else { - dataGasReport.setId(dataGasReportList.get(0).getId()); - } - return dataGasMapper.updateById(dataGasReport); - } - -} diff --git a/src/main/java/com/casic/entity/AlarmJob.java b/src/main/java/com/casic/entity/AlarmJob.java new file mode 100644 index 0000000..65a6096 --- /dev/null +++ b/src/main/java/com/casic/entity/AlarmJob.java @@ -0,0 +1,165 @@ +package com.casic.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 报警工单表 + *

+ * + * @author casic123 + * @since 2019-05-17 + */ +@Data +@TableName("alarm_job") +public class AlarmJob extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.AUTO) + private Long id; + /** + * 工单编号 + */ + @TableField("JOBCODE") + private String jobcode; + /** + * 工单类型 + */ + @TableField("JOG_TYPE") + private String jobType; + /** + * 井编号 + */ + @TableField("WELL_CODE") + private String wellCode; + /** + * 设备编号 + */ + @TableField("DEVCODE") + private String devcode; + /** + * 工单创建时间 + */ + @TableField("CREATE_TIME") + private Date createTime; + /** + * 工单状态(0待处理,1待确认,2处理中,3完成) + */ + @TableField("JOB_STATUS") + private String jobStatus; + /** + * 接单人员 + */ + @TableField("GET_JOB_PERSON") + private Long getJobPerson; + /** + * 接单时间 + */ + @TableField("GET_JOB_TIME") + private Date getJobTime; + /** + * 应接单时间 + */ + @TableField("SHOULD_GET_TIME") + private Date shouldGetTime; + /** + * 第一现场情况 + */ + @TableField("FIRST_STATE") + private String firstState; + /** + * 第一现场照片 + */ + @TableField("FIRST_STATE_PHOTOS") + private String firstStatePhotos; + /** + * 确认人员 + */ + @TableField("CONFIRM_JOB_PERSON") + private Long confirmJobPerson; + /** + * 确认时间 + */ + @TableField("CONFRIM_JOB_TIME") + private Date confrimJobTime; + /** + * 处理人员 + */ + @TableField("HANDLE_JOB_Person") + private Long handleJobPerson; + /** + * 处理时间 + */ + @TableField("HANDLE_JOB_TIME") + private Date handleJobTime; + /** + * 维护情况记录 + */ + @TableField("HANDLE_MESSAGE") + private String handleMessage; + /** + * 维护图片 + */ + @TableField("HANDLE_PHOTOS") + private String handlePhotos; + /** + * 工单流转记录 + */ + @TableField("FLOW") + private String flow; + + @TableField("JOB_BELONG_TO") + private Long jobBelongTo; + + @TableField("JOB_FLAG_DELAY") + private String jobFlagDelay; + + @TableField("JOB_FLAG_1") + private String jobFlag1; + + @TableField(exist = false) + private String alarmValue; + + @TableField(exist = false) + private String alarmContentName; + + @TableField(exist = false) + private Integer recordId; + + @Override + public String toString() { + return "AlarmJob{" + + "id=" + id + + ", jobcode=" + jobcode + + ", jogType=" + jobType + + ", wellCode=" + wellCode + + ", devcode=" + devcode + + ", createTime=" + createTime + + ", jobStatus=" + jobStatus + + ", getJobPerson=" + getJobPerson + + ", getJobTime=" + getJobTime + + ", firstState=" + firstState + + ", firstStatePhotos=" + firstStatePhotos + + ", confirmJobPerson=" + confirmJobPerson + + ", confrimJobTime=" + confrimJobTime + + ", handleJobPerson=" + handleJobPerson + + ", handleJobTime=" + handleJobTime + + ", handleMessage=" + handleMessage + + ", handlePhotos=" + handlePhotos + + ", flow=" + flow + + ", recordId=" + recordId + + "}"; + } +} diff --git a/src/main/java/com/casic/entity/AlarmRecords.java b/src/main/java/com/casic/entity/AlarmRecords.java new file mode 100644 index 0000000..3bc2cab --- /dev/null +++ b/src/main/java/com/casic/entity/AlarmRecords.java @@ -0,0 +1,108 @@ +package com.casic.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +import java.util.Date; + +/** + *

+ * + *

+ * + * @author casic123 + * @since 2019-05-17 + */ +@Data +@TableName("alarm_records") +public class AlarmRecords extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.AUTO) + private Long id; + /** + * 设备ID + */ + @TableField("DEVICE_ID") + private Long deviceId; + /** + * 设备编号 + */ + @TableField("DEVCODE") + private String devcode; + /** + * 闸井编号 + */ + @TableField("WELL_CODE") + private String wellCode; + /** + * 告警类型 + */ + @TableField("ALARM_TYPE") + private String alarmType; + /** + * 告警内容 + */ + @TableField("ALARM_CONTENT") + private String alarmContent; + /** + * 告警数值 + */ + @TableField("ALARM_VALUE") + private String alarmValue; + /** + * 告警等级 + */ + @TableField("ALARM_LEVEL") + private Integer alarmLevel; + /** + * 告警详情 + */ + @TableField("ALARM_MSG") + private String alarmMessage; + /** + * 告警时间 + */ + @TableField("ALARM_TIME") + private Date alarmTime; + /** + * 告警状态 + */ + @TableField("STATUS") + private String status; + /** + * 工单编号 + */ + @TableField("JOB_ID") + private Long jobId; + + @TableField(exist = false) + private Integer jobStatus; + + @Override + public String toString() { + return "AlarmRecords{" + + "id=" + id + + ", deviceId=" + deviceId + + ", devcode=" + devcode + + ", wellCode=" + wellCode + + ", alarmType=" + alarmType + + ", alarmContent=" + alarmContent + + ", alarmValue=" + alarmValue + + ", alarmLevel=" + alarmLevel + + ", alarmMessage=" + alarmMessage + + ", alarmTime=" + alarmTime + + ", status=" + status + + ", jobId=" + jobId + + ", jobStatus=" + jobStatus + + "}"; + } +} diff --git a/src/main/java/com/casic/controller/DeviceDataController.java b/src/main/java/com/casic/controller/DeviceDataController.java index e5351c9..971b258 100644 --- a/src/main/java/com/casic/controller/DeviceDataController.java +++ b/src/main/java/com/casic/controller/DeviceDataController.java @@ -1,7 +1,6 @@ package com.casic.controller; import com.casic.model.DataReportParam; -import com.casic.model.HeartbeatParam; import com.casic.model.ResponseData; import com.casic.service.DeviceDataService; import org.springframework.web.bind.annotation.PostMapping; @@ -19,19 +18,9 @@ this.dataService = dataService; } - @PostMapping("/commit") - public ResponseData DeviceDataCommit(@RequestBody DataReportParam dataReportParam) { - return dataService.DeviceDataCommit(dataReportParam); - } - - @PostMapping("/heartbeat") - public ResponseData heartBeat(@RequestBody HeartbeatParam heartbeatParam) { - return dataService.heartBeatSave(heartbeatParam); - } - @PostMapping("/gas/receiver") - public ResponseData gasReceiver(@RequestBody HeartbeatParam heartbeatParam) { - return dataService.heartBeatSave(heartbeatParam); + public ResponseData gasReceiver(@RequestBody DataReportParam dataReportParam) { + return dataService.gasReceiver(dataReportParam); } } diff --git a/src/main/java/com/casic/dao/AlarmJobMapper.java b/src/main/java/com/casic/dao/AlarmJobMapper.java new file mode 100644 index 0000000..e5e9c8d --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmJobMapper.java @@ -0,0 +1,17 @@ +package com.casic.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.AlarmJob; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +@Mapper +public interface AlarmJobMapper extends BaseMapper { + + @Select("SELECT MAX(jobcode) " + + "FROM alarm_job " + + "WHERE JOBCODE like '${jobcode}%'") + String getJobCodeMaxSerial(@Param("jobcode") String jobcode); + +} diff --git a/src/main/java/com/casic/dao/AlarmRecordsMapper.java b/src/main/java/com/casic/dao/AlarmRecordsMapper.java new file mode 100644 index 0000000..8da7dcb --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -0,0 +1,28 @@ +package com.casic.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.AlarmRecords; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +@Mapper +public interface AlarmRecordsMapper extends BaseMapper { + + + @Select("SELECT JOB_ID AS \"jobId\"\n " + + "FROM alarm_records\n " + + "WHERE DEVCODE = #{devcode}\n " + + "AND ALARM_CONTENT = #{MsgContent}\n " + + "AND STATUS='1'\n " + + "AND JOB_ID>0 ") + String isOldAlarmRecord(@Param("devcode") String devcode, @Param("MsgContent") String MsgContent); + + @Update(" UPDATE alarm_records\n" + + " SET STATUS='0'\n" + + " WHERE DEVCODE = #{devcode}\n" + + " AND ALARM_CONTENT = #{MsgContent}\n" + + " AND STATUS='1'") + Integer updateOldAlarmRecord(@Param("devcode") String devcode, @Param("MsgContent") String MsgContent); +} diff --git a/src/main/java/com/casic/dao/DataGasMapper.java b/src/main/java/com/casic/dao/DataGasMapper.java index 47e7cce..6e08811 100644 --- a/src/main/java/com/casic/dao/DataGasMapper.java +++ b/src/main/java/com/casic/dao/DataGasMapper.java @@ -1,9 +1,41 @@ package com.casic.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.casic.entity.DataGasReport; +import com.casic.entity.DataGasDector; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +import java.util.List; +import java.util.Map; @Mapper -public interface DataGasMapper extends BaseMapper { +public interface DataGasMapper extends BaseMapper { + + @Select("select bd.id as \"deviceId\" " + + "from bus_device_well bdw " + + "join (select id from bus_device where devcode=#{devcode}) bd ON bd.id=bdw.device_id " + + "join bus_well_info bwi ON bwi.id=bdw.well_id ") + Map getWellCode(@Param("devcode") String devcode); + + @Update("UPDATE bus_device" + + "SET ONLINE_STATE=0" + + "WHERE devcode=#{devcode} ") + void setOfflineByDevcode(@Param("devcode") String devcode); + + @Select("SELECT level,high_value " + + "FROM alarm_level " + + "WHERE device_type=#{deviceType} ") + List> getAlarmLevelList(@Param("deviceType") String deviceType); + + @Select("SELECT devcode " + + "FROM data_gas_dector " + + "WHERE devcode=#{devcode} " + + "AND date_part('minute',now()-uptime) < ${minutes}" + + "ORDER BY uptime DESC " + + "LIMIT 1") + String getLastData(@Param("minutes") String minutes, + @Param("devcode") String devcode); + } diff --git a/src/main/java/com/casic/dao/impl/AlarmJobDao.java b/src/main/java/com/casic/dao/impl/AlarmJobDao.java new file mode 100644 index 0000000..3a2a424 --- /dev/null +++ b/src/main/java/com/casic/dao/impl/AlarmJobDao.java @@ -0,0 +1,54 @@ +package com.casic.dao.impl; + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.AlarmJobMapper; +import com.casic.entity.AlarmJob; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Component +public class AlarmJobDao { + + public static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyyMMdd"); + + @Resource + private AlarmJobMapper alarmJobMapper; + + public AlarmJob saveData(String devCode, String wellCode, String devTypeName, String jobType) { + AlarmJob alarmJob = new AlarmJob(); + alarmJob.setDevcode(devCode); + alarmJob.setWellCode(wellCode); + alarmJob.setJobStatus("0"); + alarmJob.setCreateTime(new Date()); + alarmJob.setJobcode(this.produceJobCode(devTypeName)); + alarmJob.setJobType(jobType); + alarmJobMapper.insert(alarmJob); + return alarmJob; + } + + /** + * 前缀+日期+4位流水号 + * + * @param devTypeName + * @return + */ + private String produceJobCode(String devTypeName) { + String pre = devTypeName; + String dataStr = sdf6.format(new Date()); + String fix = this.getJobCodeMaxSerial(pre + dataStr); + return StringUtils.isEmpty(fix) ? pre + dataStr + String.format("%04d", Long.valueOf(fix) + 1L) : pre + dataStr + "0001"; + } + + + private String getJobCodeMaxSerial(String jobcode) { + String MaxSerialJobCode = alarmJobMapper.getJobCodeMaxSerial(jobcode); + String fix = ""; + if (null != MaxSerialJobCode && MaxSerialJobCode.length() > 4) { + fix = MaxSerialJobCode.substring(MaxSerialJobCode.length() - 4); + } + return fix; + } +} diff --git a/src/main/java/com/casic/dao/impl/DeviceDataMapper.java b/src/main/java/com/casic/dao/impl/DeviceDataMapper.java deleted file mode 100644 index c797e55..0000000 --- a/src/main/java/com/casic/dao/impl/DeviceDataMapper.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.casic.dao.impl; - -import com.alibaba.fastjson.JSON; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; -import com.casic.dao.DataGasMapper; -import com.casic.entity.DataGasReport; -import com.casic.model.DataReportParam; -import com.casic.model.HeartbeatParam; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import javax.management.Query; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.time.DateTimeException; -import java.util.*; - -@Slf4j -@Component -public class DeviceDataMapper { - @Autowired - DataGasMapper dataGasMapper; - - public int addDeviceData(DataReportParam dataReportParam) { - DataGasReport dataGasReport = new DataGasReport(); - dataGasReport.setImei(dataReportParam.getIMEI()); - dataGasReport.setImsi(dataReportParam.getIMSI()); - try { - dataGasReport.setUptime(new Date(Long.valueOf(dataReportParam.getTimestamp()))); - } catch (DateTimeException dex) { - log.error("主题,日期转换出错,时间戳为{},异常信息为{}", dataReportParam.getTimestamp(), dex); - } - dataGasReport.setGasSampleValue(dataReportParam.getPayload().get("gas_sensor_state").toString()); - dataGasReport.setGasSensorState(dataReportParam.getPayload().get("gas_sample_value").toString()); - dataGasReport.setLogtime(new Date()); - return dataGasMapper.insert(dataGasReport); - } - - public int editDeviceData(HeartbeatParam heartbeatParam) { - DataGasReport dataGasReport = new DataGasReport(); - dataGasReport.setImei(heartbeatParam.getIMEI()); - dataGasReport.setImsi(heartbeatParam.getIMSI()); - //电池电压-电池点亮 - dataGasReport.setBatteryVoltage(heartbeatParam.getBattery_voltage()); - dataGasReport.setBatteryValue(heartbeatParam.getBattery_value()); - // - dataGasReport.setCellId(heartbeatParam.getCell_id()); - dataGasReport.setIccid(heartbeatParam.getICCID()); - //噪音、接收功率、小区标识 - dataGasReport.setPci(heartbeatParam.getPci()); - dataGasReport.setRsrp(heartbeatParam.getRsrp()); - dataGasReport.setSinr(heartbeatParam.getSinr()); - dataGasReport.setHeartbeatTime(heartbeatParam.getHeartbeat_time()); - QueryWrapper queryWrapper = new QueryWrapper() - .eq("DEVCODE", heartbeatParam.getIMEI()) - .orderByDesc("LOGTIME").last("limit 1"); - List dataGasReportList = dataGasMapper.selectList(queryWrapper); - if (dataGasReportList.size() == 0) { - return 0; - } else { - dataGasReport.setId(dataGasReportList.get(0).getId()); - } - return dataGasMapper.updateById(dataGasReport); - } - -} diff --git a/src/main/java/com/casic/entity/AlarmJob.java b/src/main/java/com/casic/entity/AlarmJob.java new file mode 100644 index 0000000..65a6096 --- /dev/null +++ b/src/main/java/com/casic/entity/AlarmJob.java @@ -0,0 +1,165 @@ +package com.casic.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 报警工单表 + *

+ * + * @author casic123 + * @since 2019-05-17 + */ +@Data +@TableName("alarm_job") +public class AlarmJob extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.AUTO) + private Long id; + /** + * 工单编号 + */ + @TableField("JOBCODE") + private String jobcode; + /** + * 工单类型 + */ + @TableField("JOG_TYPE") + private String jobType; + /** + * 井编号 + */ + @TableField("WELL_CODE") + private String wellCode; + /** + * 设备编号 + */ + @TableField("DEVCODE") + private String devcode; + /** + * 工单创建时间 + */ + @TableField("CREATE_TIME") + private Date createTime; + /** + * 工单状态(0待处理,1待确认,2处理中,3完成) + */ + @TableField("JOB_STATUS") + private String jobStatus; + /** + * 接单人员 + */ + @TableField("GET_JOB_PERSON") + private Long getJobPerson; + /** + * 接单时间 + */ + @TableField("GET_JOB_TIME") + private Date getJobTime; + /** + * 应接单时间 + */ + @TableField("SHOULD_GET_TIME") + private Date shouldGetTime; + /** + * 第一现场情况 + */ + @TableField("FIRST_STATE") + private String firstState; + /** + * 第一现场照片 + */ + @TableField("FIRST_STATE_PHOTOS") + private String firstStatePhotos; + /** + * 确认人员 + */ + @TableField("CONFIRM_JOB_PERSON") + private Long confirmJobPerson; + /** + * 确认时间 + */ + @TableField("CONFRIM_JOB_TIME") + private Date confrimJobTime; + /** + * 处理人员 + */ + @TableField("HANDLE_JOB_Person") + private Long handleJobPerson; + /** + * 处理时间 + */ + @TableField("HANDLE_JOB_TIME") + private Date handleJobTime; + /** + * 维护情况记录 + */ + @TableField("HANDLE_MESSAGE") + private String handleMessage; + /** + * 维护图片 + */ + @TableField("HANDLE_PHOTOS") + private String handlePhotos; + /** + * 工单流转记录 + */ + @TableField("FLOW") + private String flow; + + @TableField("JOB_BELONG_TO") + private Long jobBelongTo; + + @TableField("JOB_FLAG_DELAY") + private String jobFlagDelay; + + @TableField("JOB_FLAG_1") + private String jobFlag1; + + @TableField(exist = false) + private String alarmValue; + + @TableField(exist = false) + private String alarmContentName; + + @TableField(exist = false) + private Integer recordId; + + @Override + public String toString() { + return "AlarmJob{" + + "id=" + id + + ", jobcode=" + jobcode + + ", jogType=" + jobType + + ", wellCode=" + wellCode + + ", devcode=" + devcode + + ", createTime=" + createTime + + ", jobStatus=" + jobStatus + + ", getJobPerson=" + getJobPerson + + ", getJobTime=" + getJobTime + + ", firstState=" + firstState + + ", firstStatePhotos=" + firstStatePhotos + + ", confirmJobPerson=" + confirmJobPerson + + ", confrimJobTime=" + confrimJobTime + + ", handleJobPerson=" + handleJobPerson + + ", handleJobTime=" + handleJobTime + + ", handleMessage=" + handleMessage + + ", handlePhotos=" + handlePhotos + + ", flow=" + flow + + ", recordId=" + recordId + + "}"; + } +} diff --git a/src/main/java/com/casic/entity/AlarmRecords.java b/src/main/java/com/casic/entity/AlarmRecords.java new file mode 100644 index 0000000..3bc2cab --- /dev/null +++ b/src/main/java/com/casic/entity/AlarmRecords.java @@ -0,0 +1,108 @@ +package com.casic.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +import java.util.Date; + +/** + *

+ * + *

+ * + * @author casic123 + * @since 2019-05-17 + */ +@Data +@TableName("alarm_records") +public class AlarmRecords extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.AUTO) + private Long id; + /** + * 设备ID + */ + @TableField("DEVICE_ID") + private Long deviceId; + /** + * 设备编号 + */ + @TableField("DEVCODE") + private String devcode; + /** + * 闸井编号 + */ + @TableField("WELL_CODE") + private String wellCode; + /** + * 告警类型 + */ + @TableField("ALARM_TYPE") + private String alarmType; + /** + * 告警内容 + */ + @TableField("ALARM_CONTENT") + private String alarmContent; + /** + * 告警数值 + */ + @TableField("ALARM_VALUE") + private String alarmValue; + /** + * 告警等级 + */ + @TableField("ALARM_LEVEL") + private Integer alarmLevel; + /** + * 告警详情 + */ + @TableField("ALARM_MSG") + private String alarmMessage; + /** + * 告警时间 + */ + @TableField("ALARM_TIME") + private Date alarmTime; + /** + * 告警状态 + */ + @TableField("STATUS") + private String status; + /** + * 工单编号 + */ + @TableField("JOB_ID") + private Long jobId; + + @TableField(exist = false) + private Integer jobStatus; + + @Override + public String toString() { + return "AlarmRecords{" + + "id=" + id + + ", deviceId=" + deviceId + + ", devcode=" + devcode + + ", wellCode=" + wellCode + + ", alarmType=" + alarmType + + ", alarmContent=" + alarmContent + + ", alarmValue=" + alarmValue + + ", alarmLevel=" + alarmLevel + + ", alarmMessage=" + alarmMessage + + ", alarmTime=" + alarmTime + + ", status=" + status + + ", jobId=" + jobId + + ", jobStatus=" + jobStatus + + "}"; + } +} diff --git a/src/main/java/com/casic/entity/DataGasDector.java b/src/main/java/com/casic/entity/DataGasDector.java new file mode 100644 index 0000000..537789a --- /dev/null +++ b/src/main/java/com/casic/entity/DataGasDector.java @@ -0,0 +1,42 @@ +package com.casic.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.util.Date; + +/** + * @author cz + * @date 2022-7-1 + */ +@Data +@TableName("data_gas_dector") +public class DataGasDector { + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + private String devcode; + private String wellCode; + private String strength; + + private String descn; + /** + * --信号与干扰加噪声比 + */ + private String sinr; + /** + * --参考信号接收功率 + */ + private String rsrp; + /** + * --物理小区标识  + */ + private String pci; + private Date uptime; + private Date logtime; +} diff --git a/src/main/java/com/casic/controller/DeviceDataController.java b/src/main/java/com/casic/controller/DeviceDataController.java index e5351c9..971b258 100644 --- a/src/main/java/com/casic/controller/DeviceDataController.java +++ b/src/main/java/com/casic/controller/DeviceDataController.java @@ -1,7 +1,6 @@ package com.casic.controller; import com.casic.model.DataReportParam; -import com.casic.model.HeartbeatParam; import com.casic.model.ResponseData; import com.casic.service.DeviceDataService; import org.springframework.web.bind.annotation.PostMapping; @@ -19,19 +18,9 @@ this.dataService = dataService; } - @PostMapping("/commit") - public ResponseData DeviceDataCommit(@RequestBody DataReportParam dataReportParam) { - return dataService.DeviceDataCommit(dataReportParam); - } - - @PostMapping("/heartbeat") - public ResponseData heartBeat(@RequestBody HeartbeatParam heartbeatParam) { - return dataService.heartBeatSave(heartbeatParam); - } - @PostMapping("/gas/receiver") - public ResponseData gasReceiver(@RequestBody HeartbeatParam heartbeatParam) { - return dataService.heartBeatSave(heartbeatParam); + public ResponseData gasReceiver(@RequestBody DataReportParam dataReportParam) { + return dataService.gasReceiver(dataReportParam); } } diff --git a/src/main/java/com/casic/dao/AlarmJobMapper.java b/src/main/java/com/casic/dao/AlarmJobMapper.java new file mode 100644 index 0000000..e5e9c8d --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmJobMapper.java @@ -0,0 +1,17 @@ +package com.casic.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.AlarmJob; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +@Mapper +public interface AlarmJobMapper extends BaseMapper { + + @Select("SELECT MAX(jobcode) " + + "FROM alarm_job " + + "WHERE JOBCODE like '${jobcode}%'") + String getJobCodeMaxSerial(@Param("jobcode") String jobcode); + +} diff --git a/src/main/java/com/casic/dao/AlarmRecordsMapper.java b/src/main/java/com/casic/dao/AlarmRecordsMapper.java new file mode 100644 index 0000000..8da7dcb --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -0,0 +1,28 @@ +package com.casic.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.AlarmRecords; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +@Mapper +public interface AlarmRecordsMapper extends BaseMapper { + + + @Select("SELECT JOB_ID AS \"jobId\"\n " + + "FROM alarm_records\n " + + "WHERE DEVCODE = #{devcode}\n " + + "AND ALARM_CONTENT = #{MsgContent}\n " + + "AND STATUS='1'\n " + + "AND JOB_ID>0 ") + String isOldAlarmRecord(@Param("devcode") String devcode, @Param("MsgContent") String MsgContent); + + @Update(" UPDATE alarm_records\n" + + " SET STATUS='0'\n" + + " WHERE DEVCODE = #{devcode}\n" + + " AND ALARM_CONTENT = #{MsgContent}\n" + + " AND STATUS='1'") + Integer updateOldAlarmRecord(@Param("devcode") String devcode, @Param("MsgContent") String MsgContent); +} diff --git a/src/main/java/com/casic/dao/DataGasMapper.java b/src/main/java/com/casic/dao/DataGasMapper.java index 47e7cce..6e08811 100644 --- a/src/main/java/com/casic/dao/DataGasMapper.java +++ b/src/main/java/com/casic/dao/DataGasMapper.java @@ -1,9 +1,41 @@ package com.casic.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.casic.entity.DataGasReport; +import com.casic.entity.DataGasDector; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +import java.util.List; +import java.util.Map; @Mapper -public interface DataGasMapper extends BaseMapper { +public interface DataGasMapper extends BaseMapper { + + @Select("select bd.id as \"deviceId\" " + + "from bus_device_well bdw " + + "join (select id from bus_device where devcode=#{devcode}) bd ON bd.id=bdw.device_id " + + "join bus_well_info bwi ON bwi.id=bdw.well_id ") + Map getWellCode(@Param("devcode") String devcode); + + @Update("UPDATE bus_device" + + "SET ONLINE_STATE=0" + + "WHERE devcode=#{devcode} ") + void setOfflineByDevcode(@Param("devcode") String devcode); + + @Select("SELECT level,high_value " + + "FROM alarm_level " + + "WHERE device_type=#{deviceType} ") + List> getAlarmLevelList(@Param("deviceType") String deviceType); + + @Select("SELECT devcode " + + "FROM data_gas_dector " + + "WHERE devcode=#{devcode} " + + "AND date_part('minute',now()-uptime) < ${minutes}" + + "ORDER BY uptime DESC " + + "LIMIT 1") + String getLastData(@Param("minutes") String minutes, + @Param("devcode") String devcode); + } diff --git a/src/main/java/com/casic/dao/impl/AlarmJobDao.java b/src/main/java/com/casic/dao/impl/AlarmJobDao.java new file mode 100644 index 0000000..3a2a424 --- /dev/null +++ b/src/main/java/com/casic/dao/impl/AlarmJobDao.java @@ -0,0 +1,54 @@ +package com.casic.dao.impl; + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.AlarmJobMapper; +import com.casic.entity.AlarmJob; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Component +public class AlarmJobDao { + + public static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyyMMdd"); + + @Resource + private AlarmJobMapper alarmJobMapper; + + public AlarmJob saveData(String devCode, String wellCode, String devTypeName, String jobType) { + AlarmJob alarmJob = new AlarmJob(); + alarmJob.setDevcode(devCode); + alarmJob.setWellCode(wellCode); + alarmJob.setJobStatus("0"); + alarmJob.setCreateTime(new Date()); + alarmJob.setJobcode(this.produceJobCode(devTypeName)); + alarmJob.setJobType(jobType); + alarmJobMapper.insert(alarmJob); + return alarmJob; + } + + /** + * 前缀+日期+4位流水号 + * + * @param devTypeName + * @return + */ + private String produceJobCode(String devTypeName) { + String pre = devTypeName; + String dataStr = sdf6.format(new Date()); + String fix = this.getJobCodeMaxSerial(pre + dataStr); + return StringUtils.isEmpty(fix) ? pre + dataStr + String.format("%04d", Long.valueOf(fix) + 1L) : pre + dataStr + "0001"; + } + + + private String getJobCodeMaxSerial(String jobcode) { + String MaxSerialJobCode = alarmJobMapper.getJobCodeMaxSerial(jobcode); + String fix = ""; + if (null != MaxSerialJobCode && MaxSerialJobCode.length() > 4) { + fix = MaxSerialJobCode.substring(MaxSerialJobCode.length() - 4); + } + return fix; + } +} diff --git a/src/main/java/com/casic/dao/impl/DeviceDataMapper.java b/src/main/java/com/casic/dao/impl/DeviceDataMapper.java deleted file mode 100644 index c797e55..0000000 --- a/src/main/java/com/casic/dao/impl/DeviceDataMapper.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.casic.dao.impl; - -import com.alibaba.fastjson.JSON; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; -import com.casic.dao.DataGasMapper; -import com.casic.entity.DataGasReport; -import com.casic.model.DataReportParam; -import com.casic.model.HeartbeatParam; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import javax.management.Query; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.time.DateTimeException; -import java.util.*; - -@Slf4j -@Component -public class DeviceDataMapper { - @Autowired - DataGasMapper dataGasMapper; - - public int addDeviceData(DataReportParam dataReportParam) { - DataGasReport dataGasReport = new DataGasReport(); - dataGasReport.setImei(dataReportParam.getIMEI()); - dataGasReport.setImsi(dataReportParam.getIMSI()); - try { - dataGasReport.setUptime(new Date(Long.valueOf(dataReportParam.getTimestamp()))); - } catch (DateTimeException dex) { - log.error("主题,日期转换出错,时间戳为{},异常信息为{}", dataReportParam.getTimestamp(), dex); - } - dataGasReport.setGasSampleValue(dataReportParam.getPayload().get("gas_sensor_state").toString()); - dataGasReport.setGasSensorState(dataReportParam.getPayload().get("gas_sample_value").toString()); - dataGasReport.setLogtime(new Date()); - return dataGasMapper.insert(dataGasReport); - } - - public int editDeviceData(HeartbeatParam heartbeatParam) { - DataGasReport dataGasReport = new DataGasReport(); - dataGasReport.setImei(heartbeatParam.getIMEI()); - dataGasReport.setImsi(heartbeatParam.getIMSI()); - //电池电压-电池点亮 - dataGasReport.setBatteryVoltage(heartbeatParam.getBattery_voltage()); - dataGasReport.setBatteryValue(heartbeatParam.getBattery_value()); - // - dataGasReport.setCellId(heartbeatParam.getCell_id()); - dataGasReport.setIccid(heartbeatParam.getICCID()); - //噪音、接收功率、小区标识 - dataGasReport.setPci(heartbeatParam.getPci()); - dataGasReport.setRsrp(heartbeatParam.getRsrp()); - dataGasReport.setSinr(heartbeatParam.getSinr()); - dataGasReport.setHeartbeatTime(heartbeatParam.getHeartbeat_time()); - QueryWrapper queryWrapper = new QueryWrapper() - .eq("DEVCODE", heartbeatParam.getIMEI()) - .orderByDesc("LOGTIME").last("limit 1"); - List dataGasReportList = dataGasMapper.selectList(queryWrapper); - if (dataGasReportList.size() == 0) { - return 0; - } else { - dataGasReport.setId(dataGasReportList.get(0).getId()); - } - return dataGasMapper.updateById(dataGasReport); - } - -} diff --git a/src/main/java/com/casic/entity/AlarmJob.java b/src/main/java/com/casic/entity/AlarmJob.java new file mode 100644 index 0000000..65a6096 --- /dev/null +++ b/src/main/java/com/casic/entity/AlarmJob.java @@ -0,0 +1,165 @@ +package com.casic.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 报警工单表 + *

+ * + * @author casic123 + * @since 2019-05-17 + */ +@Data +@TableName("alarm_job") +public class AlarmJob extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.AUTO) + private Long id; + /** + * 工单编号 + */ + @TableField("JOBCODE") + private String jobcode; + /** + * 工单类型 + */ + @TableField("JOG_TYPE") + private String jobType; + /** + * 井编号 + */ + @TableField("WELL_CODE") + private String wellCode; + /** + * 设备编号 + */ + @TableField("DEVCODE") + private String devcode; + /** + * 工单创建时间 + */ + @TableField("CREATE_TIME") + private Date createTime; + /** + * 工单状态(0待处理,1待确认,2处理中,3完成) + */ + @TableField("JOB_STATUS") + private String jobStatus; + /** + * 接单人员 + */ + @TableField("GET_JOB_PERSON") + private Long getJobPerson; + /** + * 接单时间 + */ + @TableField("GET_JOB_TIME") + private Date getJobTime; + /** + * 应接单时间 + */ + @TableField("SHOULD_GET_TIME") + private Date shouldGetTime; + /** + * 第一现场情况 + */ + @TableField("FIRST_STATE") + private String firstState; + /** + * 第一现场照片 + */ + @TableField("FIRST_STATE_PHOTOS") + private String firstStatePhotos; + /** + * 确认人员 + */ + @TableField("CONFIRM_JOB_PERSON") + private Long confirmJobPerson; + /** + * 确认时间 + */ + @TableField("CONFRIM_JOB_TIME") + private Date confrimJobTime; + /** + * 处理人员 + */ + @TableField("HANDLE_JOB_Person") + private Long handleJobPerson; + /** + * 处理时间 + */ + @TableField("HANDLE_JOB_TIME") + private Date handleJobTime; + /** + * 维护情况记录 + */ + @TableField("HANDLE_MESSAGE") + private String handleMessage; + /** + * 维护图片 + */ + @TableField("HANDLE_PHOTOS") + private String handlePhotos; + /** + * 工单流转记录 + */ + @TableField("FLOW") + private String flow; + + @TableField("JOB_BELONG_TO") + private Long jobBelongTo; + + @TableField("JOB_FLAG_DELAY") + private String jobFlagDelay; + + @TableField("JOB_FLAG_1") + private String jobFlag1; + + @TableField(exist = false) + private String alarmValue; + + @TableField(exist = false) + private String alarmContentName; + + @TableField(exist = false) + private Integer recordId; + + @Override + public String toString() { + return "AlarmJob{" + + "id=" + id + + ", jobcode=" + jobcode + + ", jogType=" + jobType + + ", wellCode=" + wellCode + + ", devcode=" + devcode + + ", createTime=" + createTime + + ", jobStatus=" + jobStatus + + ", getJobPerson=" + getJobPerson + + ", getJobTime=" + getJobTime + + ", firstState=" + firstState + + ", firstStatePhotos=" + firstStatePhotos + + ", confirmJobPerson=" + confirmJobPerson + + ", confrimJobTime=" + confrimJobTime + + ", handleJobPerson=" + handleJobPerson + + ", handleJobTime=" + handleJobTime + + ", handleMessage=" + handleMessage + + ", handlePhotos=" + handlePhotos + + ", flow=" + flow + + ", recordId=" + recordId + + "}"; + } +} diff --git a/src/main/java/com/casic/entity/AlarmRecords.java b/src/main/java/com/casic/entity/AlarmRecords.java new file mode 100644 index 0000000..3bc2cab --- /dev/null +++ b/src/main/java/com/casic/entity/AlarmRecords.java @@ -0,0 +1,108 @@ +package com.casic.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +import java.util.Date; + +/** + *

+ * + *

+ * + * @author casic123 + * @since 2019-05-17 + */ +@Data +@TableName("alarm_records") +public class AlarmRecords extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.AUTO) + private Long id; + /** + * 设备ID + */ + @TableField("DEVICE_ID") + private Long deviceId; + /** + * 设备编号 + */ + @TableField("DEVCODE") + private String devcode; + /** + * 闸井编号 + */ + @TableField("WELL_CODE") + private String wellCode; + /** + * 告警类型 + */ + @TableField("ALARM_TYPE") + private String alarmType; + /** + * 告警内容 + */ + @TableField("ALARM_CONTENT") + private String alarmContent; + /** + * 告警数值 + */ + @TableField("ALARM_VALUE") + private String alarmValue; + /** + * 告警等级 + */ + @TableField("ALARM_LEVEL") + private Integer alarmLevel; + /** + * 告警详情 + */ + @TableField("ALARM_MSG") + private String alarmMessage; + /** + * 告警时间 + */ + @TableField("ALARM_TIME") + private Date alarmTime; + /** + * 告警状态 + */ + @TableField("STATUS") + private String status; + /** + * 工单编号 + */ + @TableField("JOB_ID") + private Long jobId; + + @TableField(exist = false) + private Integer jobStatus; + + @Override + public String toString() { + return "AlarmRecords{" + + "id=" + id + + ", deviceId=" + deviceId + + ", devcode=" + devcode + + ", wellCode=" + wellCode + + ", alarmType=" + alarmType + + ", alarmContent=" + alarmContent + + ", alarmValue=" + alarmValue + + ", alarmLevel=" + alarmLevel + + ", alarmMessage=" + alarmMessage + + ", alarmTime=" + alarmTime + + ", status=" + status + + ", jobId=" + jobId + + ", jobStatus=" + jobStatus + + "}"; + } +} diff --git a/src/main/java/com/casic/entity/DataGasDector.java b/src/main/java/com/casic/entity/DataGasDector.java new file mode 100644 index 0000000..537789a --- /dev/null +++ b/src/main/java/com/casic/entity/DataGasDector.java @@ -0,0 +1,42 @@ +package com.casic.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.util.Date; + +/** + * @author cz + * @date 2022-7-1 + */ +@Data +@TableName("data_gas_dector") +public class DataGasDector { + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + private String devcode; + private String wellCode; + private String strength; + + private String descn; + /** + * --信号与干扰加噪声比 + */ + private String sinr; + /** + * --参考信号接收功率 + */ + private String rsrp; + /** + * --物理小区标识  + */ + private String pci; + private Date uptime; + private Date logtime; +} diff --git a/src/main/java/com/casic/entity/DataGasReport.java b/src/main/java/com/casic/entity/DataGasReport.java deleted file mode 100644 index c43ccdf..0000000 --- a/src/main/java/com/casic/entity/DataGasReport.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.casic.entity; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; - -import java.util.Date; - -/** - * @author cz - * @date 2022-7-1 - */ -@Data -@TableName("data_gas_dector") -public class DataGasReport { - /** - * 主键 - */ - @TableId(value = "id", type = IdType.AUTO) - private Integer id; - - @TableField("devcode") - private String imei; - private String wellcode; - - private String imsi; - /** - * --事件类型 0正常 1低报 2高报 - */ - private String gasSensorState; - /** - * --浓度值 - */ - private String gasSampleValue; - /** - * --信号与干扰加噪声比 - */ - private String sinr; - /** - * --参考信号接收功率 - */ - private String rsrp; - /** - * --物理小区标识  - */ - private String pci; - /** - * --心跳周期 - */ - private String heartbeatTime; - - /** - * --小区位置信息 - */ - private String cellId; - /** - * --电池电压 - */ - private String batteryVoltage; - /** - * --电池电量 - */ - private String batteryValue; - private String iccid; - private Date uptime; - private Date logtime; -} diff --git a/src/main/java/com/casic/controller/DeviceDataController.java b/src/main/java/com/casic/controller/DeviceDataController.java index e5351c9..971b258 100644 --- a/src/main/java/com/casic/controller/DeviceDataController.java +++ b/src/main/java/com/casic/controller/DeviceDataController.java @@ -1,7 +1,6 @@ package com.casic.controller; import com.casic.model.DataReportParam; -import com.casic.model.HeartbeatParam; import com.casic.model.ResponseData; import com.casic.service.DeviceDataService; import org.springframework.web.bind.annotation.PostMapping; @@ -19,19 +18,9 @@ this.dataService = dataService; } - @PostMapping("/commit") - public ResponseData DeviceDataCommit(@RequestBody DataReportParam dataReportParam) { - return dataService.DeviceDataCommit(dataReportParam); - } - - @PostMapping("/heartbeat") - public ResponseData heartBeat(@RequestBody HeartbeatParam heartbeatParam) { - return dataService.heartBeatSave(heartbeatParam); - } - @PostMapping("/gas/receiver") - public ResponseData gasReceiver(@RequestBody HeartbeatParam heartbeatParam) { - return dataService.heartBeatSave(heartbeatParam); + public ResponseData gasReceiver(@RequestBody DataReportParam dataReportParam) { + return dataService.gasReceiver(dataReportParam); } } diff --git a/src/main/java/com/casic/dao/AlarmJobMapper.java b/src/main/java/com/casic/dao/AlarmJobMapper.java new file mode 100644 index 0000000..e5e9c8d --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmJobMapper.java @@ -0,0 +1,17 @@ +package com.casic.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.AlarmJob; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +@Mapper +public interface AlarmJobMapper extends BaseMapper { + + @Select("SELECT MAX(jobcode) " + + "FROM alarm_job " + + "WHERE JOBCODE like '${jobcode}%'") + String getJobCodeMaxSerial(@Param("jobcode") String jobcode); + +} diff --git a/src/main/java/com/casic/dao/AlarmRecordsMapper.java b/src/main/java/com/casic/dao/AlarmRecordsMapper.java new file mode 100644 index 0000000..8da7dcb --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -0,0 +1,28 @@ +package com.casic.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.AlarmRecords; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +@Mapper +public interface AlarmRecordsMapper extends BaseMapper { + + + @Select("SELECT JOB_ID AS \"jobId\"\n " + + "FROM alarm_records\n " + + "WHERE DEVCODE = #{devcode}\n " + + "AND ALARM_CONTENT = #{MsgContent}\n " + + "AND STATUS='1'\n " + + "AND JOB_ID>0 ") + String isOldAlarmRecord(@Param("devcode") String devcode, @Param("MsgContent") String MsgContent); + + @Update(" UPDATE alarm_records\n" + + " SET STATUS='0'\n" + + " WHERE DEVCODE = #{devcode}\n" + + " AND ALARM_CONTENT = #{MsgContent}\n" + + " AND STATUS='1'") + Integer updateOldAlarmRecord(@Param("devcode") String devcode, @Param("MsgContent") String MsgContent); +} diff --git a/src/main/java/com/casic/dao/DataGasMapper.java b/src/main/java/com/casic/dao/DataGasMapper.java index 47e7cce..6e08811 100644 --- a/src/main/java/com/casic/dao/DataGasMapper.java +++ b/src/main/java/com/casic/dao/DataGasMapper.java @@ -1,9 +1,41 @@ package com.casic.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.casic.entity.DataGasReport; +import com.casic.entity.DataGasDector; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +import java.util.List; +import java.util.Map; @Mapper -public interface DataGasMapper extends BaseMapper { +public interface DataGasMapper extends BaseMapper { + + @Select("select bd.id as \"deviceId\" " + + "from bus_device_well bdw " + + "join (select id from bus_device where devcode=#{devcode}) bd ON bd.id=bdw.device_id " + + "join bus_well_info bwi ON bwi.id=bdw.well_id ") + Map getWellCode(@Param("devcode") String devcode); + + @Update("UPDATE bus_device" + + "SET ONLINE_STATE=0" + + "WHERE devcode=#{devcode} ") + void setOfflineByDevcode(@Param("devcode") String devcode); + + @Select("SELECT level,high_value " + + "FROM alarm_level " + + "WHERE device_type=#{deviceType} ") + List> getAlarmLevelList(@Param("deviceType") String deviceType); + + @Select("SELECT devcode " + + "FROM data_gas_dector " + + "WHERE devcode=#{devcode} " + + "AND date_part('minute',now()-uptime) < ${minutes}" + + "ORDER BY uptime DESC " + + "LIMIT 1") + String getLastData(@Param("minutes") String minutes, + @Param("devcode") String devcode); + } diff --git a/src/main/java/com/casic/dao/impl/AlarmJobDao.java b/src/main/java/com/casic/dao/impl/AlarmJobDao.java new file mode 100644 index 0000000..3a2a424 --- /dev/null +++ b/src/main/java/com/casic/dao/impl/AlarmJobDao.java @@ -0,0 +1,54 @@ +package com.casic.dao.impl; + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.AlarmJobMapper; +import com.casic.entity.AlarmJob; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Component +public class AlarmJobDao { + + public static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyyMMdd"); + + @Resource + private AlarmJobMapper alarmJobMapper; + + public AlarmJob saveData(String devCode, String wellCode, String devTypeName, String jobType) { + AlarmJob alarmJob = new AlarmJob(); + alarmJob.setDevcode(devCode); + alarmJob.setWellCode(wellCode); + alarmJob.setJobStatus("0"); + alarmJob.setCreateTime(new Date()); + alarmJob.setJobcode(this.produceJobCode(devTypeName)); + alarmJob.setJobType(jobType); + alarmJobMapper.insert(alarmJob); + return alarmJob; + } + + /** + * 前缀+日期+4位流水号 + * + * @param devTypeName + * @return + */ + private String produceJobCode(String devTypeName) { + String pre = devTypeName; + String dataStr = sdf6.format(new Date()); + String fix = this.getJobCodeMaxSerial(pre + dataStr); + return StringUtils.isEmpty(fix) ? pre + dataStr + String.format("%04d", Long.valueOf(fix) + 1L) : pre + dataStr + "0001"; + } + + + private String getJobCodeMaxSerial(String jobcode) { + String MaxSerialJobCode = alarmJobMapper.getJobCodeMaxSerial(jobcode); + String fix = ""; + if (null != MaxSerialJobCode && MaxSerialJobCode.length() > 4) { + fix = MaxSerialJobCode.substring(MaxSerialJobCode.length() - 4); + } + return fix; + } +} diff --git a/src/main/java/com/casic/dao/impl/DeviceDataMapper.java b/src/main/java/com/casic/dao/impl/DeviceDataMapper.java deleted file mode 100644 index c797e55..0000000 --- a/src/main/java/com/casic/dao/impl/DeviceDataMapper.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.casic.dao.impl; - -import com.alibaba.fastjson.JSON; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; -import com.casic.dao.DataGasMapper; -import com.casic.entity.DataGasReport; -import com.casic.model.DataReportParam; -import com.casic.model.HeartbeatParam; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import javax.management.Query; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.time.DateTimeException; -import java.util.*; - -@Slf4j -@Component -public class DeviceDataMapper { - @Autowired - DataGasMapper dataGasMapper; - - public int addDeviceData(DataReportParam dataReportParam) { - DataGasReport dataGasReport = new DataGasReport(); - dataGasReport.setImei(dataReportParam.getIMEI()); - dataGasReport.setImsi(dataReportParam.getIMSI()); - try { - dataGasReport.setUptime(new Date(Long.valueOf(dataReportParam.getTimestamp()))); - } catch (DateTimeException dex) { - log.error("主题,日期转换出错,时间戳为{},异常信息为{}", dataReportParam.getTimestamp(), dex); - } - dataGasReport.setGasSampleValue(dataReportParam.getPayload().get("gas_sensor_state").toString()); - dataGasReport.setGasSensorState(dataReportParam.getPayload().get("gas_sample_value").toString()); - dataGasReport.setLogtime(new Date()); - return dataGasMapper.insert(dataGasReport); - } - - public int editDeviceData(HeartbeatParam heartbeatParam) { - DataGasReport dataGasReport = new DataGasReport(); - dataGasReport.setImei(heartbeatParam.getIMEI()); - dataGasReport.setImsi(heartbeatParam.getIMSI()); - //电池电压-电池点亮 - dataGasReport.setBatteryVoltage(heartbeatParam.getBattery_voltage()); - dataGasReport.setBatteryValue(heartbeatParam.getBattery_value()); - // - dataGasReport.setCellId(heartbeatParam.getCell_id()); - dataGasReport.setIccid(heartbeatParam.getICCID()); - //噪音、接收功率、小区标识 - dataGasReport.setPci(heartbeatParam.getPci()); - dataGasReport.setRsrp(heartbeatParam.getRsrp()); - dataGasReport.setSinr(heartbeatParam.getSinr()); - dataGasReport.setHeartbeatTime(heartbeatParam.getHeartbeat_time()); - QueryWrapper queryWrapper = new QueryWrapper() - .eq("DEVCODE", heartbeatParam.getIMEI()) - .orderByDesc("LOGTIME").last("limit 1"); - List dataGasReportList = dataGasMapper.selectList(queryWrapper); - if (dataGasReportList.size() == 0) { - return 0; - } else { - dataGasReport.setId(dataGasReportList.get(0).getId()); - } - return dataGasMapper.updateById(dataGasReport); - } - -} diff --git a/src/main/java/com/casic/entity/AlarmJob.java b/src/main/java/com/casic/entity/AlarmJob.java new file mode 100644 index 0000000..65a6096 --- /dev/null +++ b/src/main/java/com/casic/entity/AlarmJob.java @@ -0,0 +1,165 @@ +package com.casic.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 报警工单表 + *

+ * + * @author casic123 + * @since 2019-05-17 + */ +@Data +@TableName("alarm_job") +public class AlarmJob extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.AUTO) + private Long id; + /** + * 工单编号 + */ + @TableField("JOBCODE") + private String jobcode; + /** + * 工单类型 + */ + @TableField("JOG_TYPE") + private String jobType; + /** + * 井编号 + */ + @TableField("WELL_CODE") + private String wellCode; + /** + * 设备编号 + */ + @TableField("DEVCODE") + private String devcode; + /** + * 工单创建时间 + */ + @TableField("CREATE_TIME") + private Date createTime; + /** + * 工单状态(0待处理,1待确认,2处理中,3完成) + */ + @TableField("JOB_STATUS") + private String jobStatus; + /** + * 接单人员 + */ + @TableField("GET_JOB_PERSON") + private Long getJobPerson; + /** + * 接单时间 + */ + @TableField("GET_JOB_TIME") + private Date getJobTime; + /** + * 应接单时间 + */ + @TableField("SHOULD_GET_TIME") + private Date shouldGetTime; + /** + * 第一现场情况 + */ + @TableField("FIRST_STATE") + private String firstState; + /** + * 第一现场照片 + */ + @TableField("FIRST_STATE_PHOTOS") + private String firstStatePhotos; + /** + * 确认人员 + */ + @TableField("CONFIRM_JOB_PERSON") + private Long confirmJobPerson; + /** + * 确认时间 + */ + @TableField("CONFRIM_JOB_TIME") + private Date confrimJobTime; + /** + * 处理人员 + */ + @TableField("HANDLE_JOB_Person") + private Long handleJobPerson; + /** + * 处理时间 + */ + @TableField("HANDLE_JOB_TIME") + private Date handleJobTime; + /** + * 维护情况记录 + */ + @TableField("HANDLE_MESSAGE") + private String handleMessage; + /** + * 维护图片 + */ + @TableField("HANDLE_PHOTOS") + private String handlePhotos; + /** + * 工单流转记录 + */ + @TableField("FLOW") + private String flow; + + @TableField("JOB_BELONG_TO") + private Long jobBelongTo; + + @TableField("JOB_FLAG_DELAY") + private String jobFlagDelay; + + @TableField("JOB_FLAG_1") + private String jobFlag1; + + @TableField(exist = false) + private String alarmValue; + + @TableField(exist = false) + private String alarmContentName; + + @TableField(exist = false) + private Integer recordId; + + @Override + public String toString() { + return "AlarmJob{" + + "id=" + id + + ", jobcode=" + jobcode + + ", jogType=" + jobType + + ", wellCode=" + wellCode + + ", devcode=" + devcode + + ", createTime=" + createTime + + ", jobStatus=" + jobStatus + + ", getJobPerson=" + getJobPerson + + ", getJobTime=" + getJobTime + + ", firstState=" + firstState + + ", firstStatePhotos=" + firstStatePhotos + + ", confirmJobPerson=" + confirmJobPerson + + ", confrimJobTime=" + confrimJobTime + + ", handleJobPerson=" + handleJobPerson + + ", handleJobTime=" + handleJobTime + + ", handleMessage=" + handleMessage + + ", handlePhotos=" + handlePhotos + + ", flow=" + flow + + ", recordId=" + recordId + + "}"; + } +} diff --git a/src/main/java/com/casic/entity/AlarmRecords.java b/src/main/java/com/casic/entity/AlarmRecords.java new file mode 100644 index 0000000..3bc2cab --- /dev/null +++ b/src/main/java/com/casic/entity/AlarmRecords.java @@ -0,0 +1,108 @@ +package com.casic.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +import java.util.Date; + +/** + *

+ * + *

+ * + * @author casic123 + * @since 2019-05-17 + */ +@Data +@TableName("alarm_records") +public class AlarmRecords extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.AUTO) + private Long id; + /** + * 设备ID + */ + @TableField("DEVICE_ID") + private Long deviceId; + /** + * 设备编号 + */ + @TableField("DEVCODE") + private String devcode; + /** + * 闸井编号 + */ + @TableField("WELL_CODE") + private String wellCode; + /** + * 告警类型 + */ + @TableField("ALARM_TYPE") + private String alarmType; + /** + * 告警内容 + */ + @TableField("ALARM_CONTENT") + private String alarmContent; + /** + * 告警数值 + */ + @TableField("ALARM_VALUE") + private String alarmValue; + /** + * 告警等级 + */ + @TableField("ALARM_LEVEL") + private Integer alarmLevel; + /** + * 告警详情 + */ + @TableField("ALARM_MSG") + private String alarmMessage; + /** + * 告警时间 + */ + @TableField("ALARM_TIME") + private Date alarmTime; + /** + * 告警状态 + */ + @TableField("STATUS") + private String status; + /** + * 工单编号 + */ + @TableField("JOB_ID") + private Long jobId; + + @TableField(exist = false) + private Integer jobStatus; + + @Override + public String toString() { + return "AlarmRecords{" + + "id=" + id + + ", deviceId=" + deviceId + + ", devcode=" + devcode + + ", wellCode=" + wellCode + + ", alarmType=" + alarmType + + ", alarmContent=" + alarmContent + + ", alarmValue=" + alarmValue + + ", alarmLevel=" + alarmLevel + + ", alarmMessage=" + alarmMessage + + ", alarmTime=" + alarmTime + + ", status=" + status + + ", jobId=" + jobId + + ", jobStatus=" + jobStatus + + "}"; + } +} diff --git a/src/main/java/com/casic/entity/DataGasDector.java b/src/main/java/com/casic/entity/DataGasDector.java new file mode 100644 index 0000000..537789a --- /dev/null +++ b/src/main/java/com/casic/entity/DataGasDector.java @@ -0,0 +1,42 @@ +package com.casic.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.util.Date; + +/** + * @author cz + * @date 2022-7-1 + */ +@Data +@TableName("data_gas_dector") +public class DataGasDector { + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + private String devcode; + private String wellCode; + private String strength; + + private String descn; + /** + * --信号与干扰加噪声比 + */ + private String sinr; + /** + * --参考信号接收功率 + */ + private String rsrp; + /** + * --物理小区标识  + */ + private String pci; + private Date uptime; + private Date logtime; +} diff --git a/src/main/java/com/casic/entity/DataGasReport.java b/src/main/java/com/casic/entity/DataGasReport.java deleted file mode 100644 index c43ccdf..0000000 --- a/src/main/java/com/casic/entity/DataGasReport.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.casic.entity; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; - -import java.util.Date; - -/** - * @author cz - * @date 2022-7-1 - */ -@Data -@TableName("data_gas_dector") -public class DataGasReport { - /** - * 主键 - */ - @TableId(value = "id", type = IdType.AUTO) - private Integer id; - - @TableField("devcode") - private String imei; - private String wellcode; - - private String imsi; - /** - * --事件类型 0正常 1低报 2高报 - */ - private String gasSensorState; - /** - * --浓度值 - */ - private String gasSampleValue; - /** - * --信号与干扰加噪声比 - */ - private String sinr; - /** - * --参考信号接收功率 - */ - private String rsrp; - /** - * --物理小区标识  - */ - private String pci; - /** - * --心跳周期 - */ - private String heartbeatTime; - - /** - * --小区位置信息 - */ - private String cellId; - /** - * --电池电压 - */ - private String batteryVoltage; - /** - * --电池电量 - */ - private String batteryValue; - private String iccid; - private Date uptime; - private Date logtime; -} diff --git a/src/main/java/com/casic/model/DataContentParam.java b/src/main/java/com/casic/model/DataContentParam.java new file mode 100644 index 0000000..46d298a --- /dev/null +++ b/src/main/java/com/casic/model/DataContentParam.java @@ -0,0 +1,19 @@ +package com.casic.model; + +import lombok.Data; + +import java.util.List; + +@Data +public class DataContentParam { + private String msg_type; + private String error_val; + private String ch_cnt; + private String erro_cnt; + private String alarm_low_cnt; + private String alarm_high_cnt; + private String offline_cnt; + private List rtd_val; + private List adc_val; + private List status_val; +} \ No newline at end of file diff --git a/src/main/java/com/casic/controller/DeviceDataController.java b/src/main/java/com/casic/controller/DeviceDataController.java index e5351c9..971b258 100644 --- a/src/main/java/com/casic/controller/DeviceDataController.java +++ b/src/main/java/com/casic/controller/DeviceDataController.java @@ -1,7 +1,6 @@ package com.casic.controller; import com.casic.model.DataReportParam; -import com.casic.model.HeartbeatParam; import com.casic.model.ResponseData; import com.casic.service.DeviceDataService; import org.springframework.web.bind.annotation.PostMapping; @@ -19,19 +18,9 @@ this.dataService = dataService; } - @PostMapping("/commit") - public ResponseData DeviceDataCommit(@RequestBody DataReportParam dataReportParam) { - return dataService.DeviceDataCommit(dataReportParam); - } - - @PostMapping("/heartbeat") - public ResponseData heartBeat(@RequestBody HeartbeatParam heartbeatParam) { - return dataService.heartBeatSave(heartbeatParam); - } - @PostMapping("/gas/receiver") - public ResponseData gasReceiver(@RequestBody HeartbeatParam heartbeatParam) { - return dataService.heartBeatSave(heartbeatParam); + public ResponseData gasReceiver(@RequestBody DataReportParam dataReportParam) { + return dataService.gasReceiver(dataReportParam); } } diff --git a/src/main/java/com/casic/dao/AlarmJobMapper.java b/src/main/java/com/casic/dao/AlarmJobMapper.java new file mode 100644 index 0000000..e5e9c8d --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmJobMapper.java @@ -0,0 +1,17 @@ +package com.casic.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.AlarmJob; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +@Mapper +public interface AlarmJobMapper extends BaseMapper { + + @Select("SELECT MAX(jobcode) " + + "FROM alarm_job " + + "WHERE JOBCODE like '${jobcode}%'") + String getJobCodeMaxSerial(@Param("jobcode") String jobcode); + +} diff --git a/src/main/java/com/casic/dao/AlarmRecordsMapper.java b/src/main/java/com/casic/dao/AlarmRecordsMapper.java new file mode 100644 index 0000000..8da7dcb --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -0,0 +1,28 @@ +package com.casic.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.AlarmRecords; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +@Mapper +public interface AlarmRecordsMapper extends BaseMapper { + + + @Select("SELECT JOB_ID AS \"jobId\"\n " + + "FROM alarm_records\n " + + "WHERE DEVCODE = #{devcode}\n " + + "AND ALARM_CONTENT = #{MsgContent}\n " + + "AND STATUS='1'\n " + + "AND JOB_ID>0 ") + String isOldAlarmRecord(@Param("devcode") String devcode, @Param("MsgContent") String MsgContent); + + @Update(" UPDATE alarm_records\n" + + " SET STATUS='0'\n" + + " WHERE DEVCODE = #{devcode}\n" + + " AND ALARM_CONTENT = #{MsgContent}\n" + + " AND STATUS='1'") + Integer updateOldAlarmRecord(@Param("devcode") String devcode, @Param("MsgContent") String MsgContent); +} diff --git a/src/main/java/com/casic/dao/DataGasMapper.java b/src/main/java/com/casic/dao/DataGasMapper.java index 47e7cce..6e08811 100644 --- a/src/main/java/com/casic/dao/DataGasMapper.java +++ b/src/main/java/com/casic/dao/DataGasMapper.java @@ -1,9 +1,41 @@ package com.casic.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.casic.entity.DataGasReport; +import com.casic.entity.DataGasDector; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +import java.util.List; +import java.util.Map; @Mapper -public interface DataGasMapper extends BaseMapper { +public interface DataGasMapper extends BaseMapper { + + @Select("select bd.id as \"deviceId\" " + + "from bus_device_well bdw " + + "join (select id from bus_device where devcode=#{devcode}) bd ON bd.id=bdw.device_id " + + "join bus_well_info bwi ON bwi.id=bdw.well_id ") + Map getWellCode(@Param("devcode") String devcode); + + @Update("UPDATE bus_device" + + "SET ONLINE_STATE=0" + + "WHERE devcode=#{devcode} ") + void setOfflineByDevcode(@Param("devcode") String devcode); + + @Select("SELECT level,high_value " + + "FROM alarm_level " + + "WHERE device_type=#{deviceType} ") + List> getAlarmLevelList(@Param("deviceType") String deviceType); + + @Select("SELECT devcode " + + "FROM data_gas_dector " + + "WHERE devcode=#{devcode} " + + "AND date_part('minute',now()-uptime) < ${minutes}" + + "ORDER BY uptime DESC " + + "LIMIT 1") + String getLastData(@Param("minutes") String minutes, + @Param("devcode") String devcode); + } diff --git a/src/main/java/com/casic/dao/impl/AlarmJobDao.java b/src/main/java/com/casic/dao/impl/AlarmJobDao.java new file mode 100644 index 0000000..3a2a424 --- /dev/null +++ b/src/main/java/com/casic/dao/impl/AlarmJobDao.java @@ -0,0 +1,54 @@ +package com.casic.dao.impl; + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.AlarmJobMapper; +import com.casic.entity.AlarmJob; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Component +public class AlarmJobDao { + + public static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyyMMdd"); + + @Resource + private AlarmJobMapper alarmJobMapper; + + public AlarmJob saveData(String devCode, String wellCode, String devTypeName, String jobType) { + AlarmJob alarmJob = new AlarmJob(); + alarmJob.setDevcode(devCode); + alarmJob.setWellCode(wellCode); + alarmJob.setJobStatus("0"); + alarmJob.setCreateTime(new Date()); + alarmJob.setJobcode(this.produceJobCode(devTypeName)); + alarmJob.setJobType(jobType); + alarmJobMapper.insert(alarmJob); + return alarmJob; + } + + /** + * 前缀+日期+4位流水号 + * + * @param devTypeName + * @return + */ + private String produceJobCode(String devTypeName) { + String pre = devTypeName; + String dataStr = sdf6.format(new Date()); + String fix = this.getJobCodeMaxSerial(pre + dataStr); + return StringUtils.isEmpty(fix) ? pre + dataStr + String.format("%04d", Long.valueOf(fix) + 1L) : pre + dataStr + "0001"; + } + + + private String getJobCodeMaxSerial(String jobcode) { + String MaxSerialJobCode = alarmJobMapper.getJobCodeMaxSerial(jobcode); + String fix = ""; + if (null != MaxSerialJobCode && MaxSerialJobCode.length() > 4) { + fix = MaxSerialJobCode.substring(MaxSerialJobCode.length() - 4); + } + return fix; + } +} diff --git a/src/main/java/com/casic/dao/impl/DeviceDataMapper.java b/src/main/java/com/casic/dao/impl/DeviceDataMapper.java deleted file mode 100644 index c797e55..0000000 --- a/src/main/java/com/casic/dao/impl/DeviceDataMapper.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.casic.dao.impl; - -import com.alibaba.fastjson.JSON; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; -import com.casic.dao.DataGasMapper; -import com.casic.entity.DataGasReport; -import com.casic.model.DataReportParam; -import com.casic.model.HeartbeatParam; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import javax.management.Query; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.time.DateTimeException; -import java.util.*; - -@Slf4j -@Component -public class DeviceDataMapper { - @Autowired - DataGasMapper dataGasMapper; - - public int addDeviceData(DataReportParam dataReportParam) { - DataGasReport dataGasReport = new DataGasReport(); - dataGasReport.setImei(dataReportParam.getIMEI()); - dataGasReport.setImsi(dataReportParam.getIMSI()); - try { - dataGasReport.setUptime(new Date(Long.valueOf(dataReportParam.getTimestamp()))); - } catch (DateTimeException dex) { - log.error("主题,日期转换出错,时间戳为{},异常信息为{}", dataReportParam.getTimestamp(), dex); - } - dataGasReport.setGasSampleValue(dataReportParam.getPayload().get("gas_sensor_state").toString()); - dataGasReport.setGasSensorState(dataReportParam.getPayload().get("gas_sample_value").toString()); - dataGasReport.setLogtime(new Date()); - return dataGasMapper.insert(dataGasReport); - } - - public int editDeviceData(HeartbeatParam heartbeatParam) { - DataGasReport dataGasReport = new DataGasReport(); - dataGasReport.setImei(heartbeatParam.getIMEI()); - dataGasReport.setImsi(heartbeatParam.getIMSI()); - //电池电压-电池点亮 - dataGasReport.setBatteryVoltage(heartbeatParam.getBattery_voltage()); - dataGasReport.setBatteryValue(heartbeatParam.getBattery_value()); - // - dataGasReport.setCellId(heartbeatParam.getCell_id()); - dataGasReport.setIccid(heartbeatParam.getICCID()); - //噪音、接收功率、小区标识 - dataGasReport.setPci(heartbeatParam.getPci()); - dataGasReport.setRsrp(heartbeatParam.getRsrp()); - dataGasReport.setSinr(heartbeatParam.getSinr()); - dataGasReport.setHeartbeatTime(heartbeatParam.getHeartbeat_time()); - QueryWrapper queryWrapper = new QueryWrapper() - .eq("DEVCODE", heartbeatParam.getIMEI()) - .orderByDesc("LOGTIME").last("limit 1"); - List dataGasReportList = dataGasMapper.selectList(queryWrapper); - if (dataGasReportList.size() == 0) { - return 0; - } else { - dataGasReport.setId(dataGasReportList.get(0).getId()); - } - return dataGasMapper.updateById(dataGasReport); - } - -} diff --git a/src/main/java/com/casic/entity/AlarmJob.java b/src/main/java/com/casic/entity/AlarmJob.java new file mode 100644 index 0000000..65a6096 --- /dev/null +++ b/src/main/java/com/casic/entity/AlarmJob.java @@ -0,0 +1,165 @@ +package com.casic.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 报警工单表 + *

+ * + * @author casic123 + * @since 2019-05-17 + */ +@Data +@TableName("alarm_job") +public class AlarmJob extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.AUTO) + private Long id; + /** + * 工单编号 + */ + @TableField("JOBCODE") + private String jobcode; + /** + * 工单类型 + */ + @TableField("JOG_TYPE") + private String jobType; + /** + * 井编号 + */ + @TableField("WELL_CODE") + private String wellCode; + /** + * 设备编号 + */ + @TableField("DEVCODE") + private String devcode; + /** + * 工单创建时间 + */ + @TableField("CREATE_TIME") + private Date createTime; + /** + * 工单状态(0待处理,1待确认,2处理中,3完成) + */ + @TableField("JOB_STATUS") + private String jobStatus; + /** + * 接单人员 + */ + @TableField("GET_JOB_PERSON") + private Long getJobPerson; + /** + * 接单时间 + */ + @TableField("GET_JOB_TIME") + private Date getJobTime; + /** + * 应接单时间 + */ + @TableField("SHOULD_GET_TIME") + private Date shouldGetTime; + /** + * 第一现场情况 + */ + @TableField("FIRST_STATE") + private String firstState; + /** + * 第一现场照片 + */ + @TableField("FIRST_STATE_PHOTOS") + private String firstStatePhotos; + /** + * 确认人员 + */ + @TableField("CONFIRM_JOB_PERSON") + private Long confirmJobPerson; + /** + * 确认时间 + */ + @TableField("CONFRIM_JOB_TIME") + private Date confrimJobTime; + /** + * 处理人员 + */ + @TableField("HANDLE_JOB_Person") + private Long handleJobPerson; + /** + * 处理时间 + */ + @TableField("HANDLE_JOB_TIME") + private Date handleJobTime; + /** + * 维护情况记录 + */ + @TableField("HANDLE_MESSAGE") + private String handleMessage; + /** + * 维护图片 + */ + @TableField("HANDLE_PHOTOS") + private String handlePhotos; + /** + * 工单流转记录 + */ + @TableField("FLOW") + private String flow; + + @TableField("JOB_BELONG_TO") + private Long jobBelongTo; + + @TableField("JOB_FLAG_DELAY") + private String jobFlagDelay; + + @TableField("JOB_FLAG_1") + private String jobFlag1; + + @TableField(exist = false) + private String alarmValue; + + @TableField(exist = false) + private String alarmContentName; + + @TableField(exist = false) + private Integer recordId; + + @Override + public String toString() { + return "AlarmJob{" + + "id=" + id + + ", jobcode=" + jobcode + + ", jogType=" + jobType + + ", wellCode=" + wellCode + + ", devcode=" + devcode + + ", createTime=" + createTime + + ", jobStatus=" + jobStatus + + ", getJobPerson=" + getJobPerson + + ", getJobTime=" + getJobTime + + ", firstState=" + firstState + + ", firstStatePhotos=" + firstStatePhotos + + ", confirmJobPerson=" + confirmJobPerson + + ", confrimJobTime=" + confrimJobTime + + ", handleJobPerson=" + handleJobPerson + + ", handleJobTime=" + handleJobTime + + ", handleMessage=" + handleMessage + + ", handlePhotos=" + handlePhotos + + ", flow=" + flow + + ", recordId=" + recordId + + "}"; + } +} diff --git a/src/main/java/com/casic/entity/AlarmRecords.java b/src/main/java/com/casic/entity/AlarmRecords.java new file mode 100644 index 0000000..3bc2cab --- /dev/null +++ b/src/main/java/com/casic/entity/AlarmRecords.java @@ -0,0 +1,108 @@ +package com.casic.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +import java.util.Date; + +/** + *

+ * + *

+ * + * @author casic123 + * @since 2019-05-17 + */ +@Data +@TableName("alarm_records") +public class AlarmRecords extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.AUTO) + private Long id; + /** + * 设备ID + */ + @TableField("DEVICE_ID") + private Long deviceId; + /** + * 设备编号 + */ + @TableField("DEVCODE") + private String devcode; + /** + * 闸井编号 + */ + @TableField("WELL_CODE") + private String wellCode; + /** + * 告警类型 + */ + @TableField("ALARM_TYPE") + private String alarmType; + /** + * 告警内容 + */ + @TableField("ALARM_CONTENT") + private String alarmContent; + /** + * 告警数值 + */ + @TableField("ALARM_VALUE") + private String alarmValue; + /** + * 告警等级 + */ + @TableField("ALARM_LEVEL") + private Integer alarmLevel; + /** + * 告警详情 + */ + @TableField("ALARM_MSG") + private String alarmMessage; + /** + * 告警时间 + */ + @TableField("ALARM_TIME") + private Date alarmTime; + /** + * 告警状态 + */ + @TableField("STATUS") + private String status; + /** + * 工单编号 + */ + @TableField("JOB_ID") + private Long jobId; + + @TableField(exist = false) + private Integer jobStatus; + + @Override + public String toString() { + return "AlarmRecords{" + + "id=" + id + + ", deviceId=" + deviceId + + ", devcode=" + devcode + + ", wellCode=" + wellCode + + ", alarmType=" + alarmType + + ", alarmContent=" + alarmContent + + ", alarmValue=" + alarmValue + + ", alarmLevel=" + alarmLevel + + ", alarmMessage=" + alarmMessage + + ", alarmTime=" + alarmTime + + ", status=" + status + + ", jobId=" + jobId + + ", jobStatus=" + jobStatus + + "}"; + } +} diff --git a/src/main/java/com/casic/entity/DataGasDector.java b/src/main/java/com/casic/entity/DataGasDector.java new file mode 100644 index 0000000..537789a --- /dev/null +++ b/src/main/java/com/casic/entity/DataGasDector.java @@ -0,0 +1,42 @@ +package com.casic.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.util.Date; + +/** + * @author cz + * @date 2022-7-1 + */ +@Data +@TableName("data_gas_dector") +public class DataGasDector { + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + private String devcode; + private String wellCode; + private String strength; + + private String descn; + /** + * --信号与干扰加噪声比 + */ + private String sinr; + /** + * --参考信号接收功率 + */ + private String rsrp; + /** + * --物理小区标识  + */ + private String pci; + private Date uptime; + private Date logtime; +} diff --git a/src/main/java/com/casic/entity/DataGasReport.java b/src/main/java/com/casic/entity/DataGasReport.java deleted file mode 100644 index c43ccdf..0000000 --- a/src/main/java/com/casic/entity/DataGasReport.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.casic.entity; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; - -import java.util.Date; - -/** - * @author cz - * @date 2022-7-1 - */ -@Data -@TableName("data_gas_dector") -public class DataGasReport { - /** - * 主键 - */ - @TableId(value = "id", type = IdType.AUTO) - private Integer id; - - @TableField("devcode") - private String imei; - private String wellcode; - - private String imsi; - /** - * --事件类型 0正常 1低报 2高报 - */ - private String gasSensorState; - /** - * --浓度值 - */ - private String gasSampleValue; - /** - * --信号与干扰加噪声比 - */ - private String sinr; - /** - * --参考信号接收功率 - */ - private String rsrp; - /** - * --物理小区标识  - */ - private String pci; - /** - * --心跳周期 - */ - private String heartbeatTime; - - /** - * --小区位置信息 - */ - private String cellId; - /** - * --电池电压 - */ - private String batteryVoltage; - /** - * --电池电量 - */ - private String batteryValue; - private String iccid; - private Date uptime; - private Date logtime; -} diff --git a/src/main/java/com/casic/model/DataContentParam.java b/src/main/java/com/casic/model/DataContentParam.java new file mode 100644 index 0000000..46d298a --- /dev/null +++ b/src/main/java/com/casic/model/DataContentParam.java @@ -0,0 +1,19 @@ +package com.casic.model; + +import lombok.Data; + +import java.util.List; + +@Data +public class DataContentParam { + private String msg_type; + private String error_val; + private String ch_cnt; + private String erro_cnt; + private String alarm_low_cnt; + private String alarm_high_cnt; + private String offline_cnt; + private List rtd_val; + private List adc_val; + private List status_val; +} \ No newline at end of file diff --git a/src/main/java/com/casic/model/DataReportParam.java b/src/main/java/com/casic/model/DataReportParam.java index 082814c..754f330 100644 --- a/src/main/java/com/casic/model/DataReportParam.java +++ b/src/main/java/com/casic/model/DataReportParam.java @@ -11,25 +11,12 @@ */ @Data public class DataReportParam { - private String upPacketSN; - private String upDataSN; - private String topic; - private String timestamp; - private String tenantId; - private String serviceId; - private String protocol; - private String productId; - /** - * gas_sensor_state = 1, --事件类型 0 正常 1 低报 2 高报 - * gas_sample_value = 11-- 浓度值 - */ - private Map payload; - private String messageType; private String deviceType; - private String deviceId; - private String assocAssetId; - @JsonProperty(value = "IMSI", required = true) - private String IMSI; - @JsonProperty(value = "IMEI", required = true) - private String IMEI; + private String iotId; + private String requestId; + private Object checkFailedData; + private String productKey; + private String gmtCreate; + private String deviceName; + private Object items; } diff --git a/src/main/java/com/casic/controller/DeviceDataController.java b/src/main/java/com/casic/controller/DeviceDataController.java index e5351c9..971b258 100644 --- a/src/main/java/com/casic/controller/DeviceDataController.java +++ b/src/main/java/com/casic/controller/DeviceDataController.java @@ -1,7 +1,6 @@ package com.casic.controller; import com.casic.model.DataReportParam; -import com.casic.model.HeartbeatParam; import com.casic.model.ResponseData; import com.casic.service.DeviceDataService; import org.springframework.web.bind.annotation.PostMapping; @@ -19,19 +18,9 @@ this.dataService = dataService; } - @PostMapping("/commit") - public ResponseData DeviceDataCommit(@RequestBody DataReportParam dataReportParam) { - return dataService.DeviceDataCommit(dataReportParam); - } - - @PostMapping("/heartbeat") - public ResponseData heartBeat(@RequestBody HeartbeatParam heartbeatParam) { - return dataService.heartBeatSave(heartbeatParam); - } - @PostMapping("/gas/receiver") - public ResponseData gasReceiver(@RequestBody HeartbeatParam heartbeatParam) { - return dataService.heartBeatSave(heartbeatParam); + public ResponseData gasReceiver(@RequestBody DataReportParam dataReportParam) { + return dataService.gasReceiver(dataReportParam); } } diff --git a/src/main/java/com/casic/dao/AlarmJobMapper.java b/src/main/java/com/casic/dao/AlarmJobMapper.java new file mode 100644 index 0000000..e5e9c8d --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmJobMapper.java @@ -0,0 +1,17 @@ +package com.casic.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.AlarmJob; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +@Mapper +public interface AlarmJobMapper extends BaseMapper { + + @Select("SELECT MAX(jobcode) " + + "FROM alarm_job " + + "WHERE JOBCODE like '${jobcode}%'") + String getJobCodeMaxSerial(@Param("jobcode") String jobcode); + +} diff --git a/src/main/java/com/casic/dao/AlarmRecordsMapper.java b/src/main/java/com/casic/dao/AlarmRecordsMapper.java new file mode 100644 index 0000000..8da7dcb --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -0,0 +1,28 @@ +package com.casic.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.AlarmRecords; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +@Mapper +public interface AlarmRecordsMapper extends BaseMapper { + + + @Select("SELECT JOB_ID AS \"jobId\"\n " + + "FROM alarm_records\n " + + "WHERE DEVCODE = #{devcode}\n " + + "AND ALARM_CONTENT = #{MsgContent}\n " + + "AND STATUS='1'\n " + + "AND JOB_ID>0 ") + String isOldAlarmRecord(@Param("devcode") String devcode, @Param("MsgContent") String MsgContent); + + @Update(" UPDATE alarm_records\n" + + " SET STATUS='0'\n" + + " WHERE DEVCODE = #{devcode}\n" + + " AND ALARM_CONTENT = #{MsgContent}\n" + + " AND STATUS='1'") + Integer updateOldAlarmRecord(@Param("devcode") String devcode, @Param("MsgContent") String MsgContent); +} diff --git a/src/main/java/com/casic/dao/DataGasMapper.java b/src/main/java/com/casic/dao/DataGasMapper.java index 47e7cce..6e08811 100644 --- a/src/main/java/com/casic/dao/DataGasMapper.java +++ b/src/main/java/com/casic/dao/DataGasMapper.java @@ -1,9 +1,41 @@ package com.casic.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.casic.entity.DataGasReport; +import com.casic.entity.DataGasDector; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +import java.util.List; +import java.util.Map; @Mapper -public interface DataGasMapper extends BaseMapper { +public interface DataGasMapper extends BaseMapper { + + @Select("select bd.id as \"deviceId\" " + + "from bus_device_well bdw " + + "join (select id from bus_device where devcode=#{devcode}) bd ON bd.id=bdw.device_id " + + "join bus_well_info bwi ON bwi.id=bdw.well_id ") + Map getWellCode(@Param("devcode") String devcode); + + @Update("UPDATE bus_device" + + "SET ONLINE_STATE=0" + + "WHERE devcode=#{devcode} ") + void setOfflineByDevcode(@Param("devcode") String devcode); + + @Select("SELECT level,high_value " + + "FROM alarm_level " + + "WHERE device_type=#{deviceType} ") + List> getAlarmLevelList(@Param("deviceType") String deviceType); + + @Select("SELECT devcode " + + "FROM data_gas_dector " + + "WHERE devcode=#{devcode} " + + "AND date_part('minute',now()-uptime) < ${minutes}" + + "ORDER BY uptime DESC " + + "LIMIT 1") + String getLastData(@Param("minutes") String minutes, + @Param("devcode") String devcode); + } diff --git a/src/main/java/com/casic/dao/impl/AlarmJobDao.java b/src/main/java/com/casic/dao/impl/AlarmJobDao.java new file mode 100644 index 0000000..3a2a424 --- /dev/null +++ b/src/main/java/com/casic/dao/impl/AlarmJobDao.java @@ -0,0 +1,54 @@ +package com.casic.dao.impl; + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.AlarmJobMapper; +import com.casic.entity.AlarmJob; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Component +public class AlarmJobDao { + + public static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyyMMdd"); + + @Resource + private AlarmJobMapper alarmJobMapper; + + public AlarmJob saveData(String devCode, String wellCode, String devTypeName, String jobType) { + AlarmJob alarmJob = new AlarmJob(); + alarmJob.setDevcode(devCode); + alarmJob.setWellCode(wellCode); + alarmJob.setJobStatus("0"); + alarmJob.setCreateTime(new Date()); + alarmJob.setJobcode(this.produceJobCode(devTypeName)); + alarmJob.setJobType(jobType); + alarmJobMapper.insert(alarmJob); + return alarmJob; + } + + /** + * 前缀+日期+4位流水号 + * + * @param devTypeName + * @return + */ + private String produceJobCode(String devTypeName) { + String pre = devTypeName; + String dataStr = sdf6.format(new Date()); + String fix = this.getJobCodeMaxSerial(pre + dataStr); + return StringUtils.isEmpty(fix) ? pre + dataStr + String.format("%04d", Long.valueOf(fix) + 1L) : pre + dataStr + "0001"; + } + + + private String getJobCodeMaxSerial(String jobcode) { + String MaxSerialJobCode = alarmJobMapper.getJobCodeMaxSerial(jobcode); + String fix = ""; + if (null != MaxSerialJobCode && MaxSerialJobCode.length() > 4) { + fix = MaxSerialJobCode.substring(MaxSerialJobCode.length() - 4); + } + return fix; + } +} diff --git a/src/main/java/com/casic/dao/impl/DeviceDataMapper.java b/src/main/java/com/casic/dao/impl/DeviceDataMapper.java deleted file mode 100644 index c797e55..0000000 --- a/src/main/java/com/casic/dao/impl/DeviceDataMapper.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.casic.dao.impl; - -import com.alibaba.fastjson.JSON; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; -import com.casic.dao.DataGasMapper; -import com.casic.entity.DataGasReport; -import com.casic.model.DataReportParam; -import com.casic.model.HeartbeatParam; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import javax.management.Query; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.time.DateTimeException; -import java.util.*; - -@Slf4j -@Component -public class DeviceDataMapper { - @Autowired - DataGasMapper dataGasMapper; - - public int addDeviceData(DataReportParam dataReportParam) { - DataGasReport dataGasReport = new DataGasReport(); - dataGasReport.setImei(dataReportParam.getIMEI()); - dataGasReport.setImsi(dataReportParam.getIMSI()); - try { - dataGasReport.setUptime(new Date(Long.valueOf(dataReportParam.getTimestamp()))); - } catch (DateTimeException dex) { - log.error("主题,日期转换出错,时间戳为{},异常信息为{}", dataReportParam.getTimestamp(), dex); - } - dataGasReport.setGasSampleValue(dataReportParam.getPayload().get("gas_sensor_state").toString()); - dataGasReport.setGasSensorState(dataReportParam.getPayload().get("gas_sample_value").toString()); - dataGasReport.setLogtime(new Date()); - return dataGasMapper.insert(dataGasReport); - } - - public int editDeviceData(HeartbeatParam heartbeatParam) { - DataGasReport dataGasReport = new DataGasReport(); - dataGasReport.setImei(heartbeatParam.getIMEI()); - dataGasReport.setImsi(heartbeatParam.getIMSI()); - //电池电压-电池点亮 - dataGasReport.setBatteryVoltage(heartbeatParam.getBattery_voltage()); - dataGasReport.setBatteryValue(heartbeatParam.getBattery_value()); - // - dataGasReport.setCellId(heartbeatParam.getCell_id()); - dataGasReport.setIccid(heartbeatParam.getICCID()); - //噪音、接收功率、小区标识 - dataGasReport.setPci(heartbeatParam.getPci()); - dataGasReport.setRsrp(heartbeatParam.getRsrp()); - dataGasReport.setSinr(heartbeatParam.getSinr()); - dataGasReport.setHeartbeatTime(heartbeatParam.getHeartbeat_time()); - QueryWrapper queryWrapper = new QueryWrapper() - .eq("DEVCODE", heartbeatParam.getIMEI()) - .orderByDesc("LOGTIME").last("limit 1"); - List dataGasReportList = dataGasMapper.selectList(queryWrapper); - if (dataGasReportList.size() == 0) { - return 0; - } else { - dataGasReport.setId(dataGasReportList.get(0).getId()); - } - return dataGasMapper.updateById(dataGasReport); - } - -} diff --git a/src/main/java/com/casic/entity/AlarmJob.java b/src/main/java/com/casic/entity/AlarmJob.java new file mode 100644 index 0000000..65a6096 --- /dev/null +++ b/src/main/java/com/casic/entity/AlarmJob.java @@ -0,0 +1,165 @@ +package com.casic.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 报警工单表 + *

+ * + * @author casic123 + * @since 2019-05-17 + */ +@Data +@TableName("alarm_job") +public class AlarmJob extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.AUTO) + private Long id; + /** + * 工单编号 + */ + @TableField("JOBCODE") + private String jobcode; + /** + * 工单类型 + */ + @TableField("JOG_TYPE") + private String jobType; + /** + * 井编号 + */ + @TableField("WELL_CODE") + private String wellCode; + /** + * 设备编号 + */ + @TableField("DEVCODE") + private String devcode; + /** + * 工单创建时间 + */ + @TableField("CREATE_TIME") + private Date createTime; + /** + * 工单状态(0待处理,1待确认,2处理中,3完成) + */ + @TableField("JOB_STATUS") + private String jobStatus; + /** + * 接单人员 + */ + @TableField("GET_JOB_PERSON") + private Long getJobPerson; + /** + * 接单时间 + */ + @TableField("GET_JOB_TIME") + private Date getJobTime; + /** + * 应接单时间 + */ + @TableField("SHOULD_GET_TIME") + private Date shouldGetTime; + /** + * 第一现场情况 + */ + @TableField("FIRST_STATE") + private String firstState; + /** + * 第一现场照片 + */ + @TableField("FIRST_STATE_PHOTOS") + private String firstStatePhotos; + /** + * 确认人员 + */ + @TableField("CONFIRM_JOB_PERSON") + private Long confirmJobPerson; + /** + * 确认时间 + */ + @TableField("CONFRIM_JOB_TIME") + private Date confrimJobTime; + /** + * 处理人员 + */ + @TableField("HANDLE_JOB_Person") + private Long handleJobPerson; + /** + * 处理时间 + */ + @TableField("HANDLE_JOB_TIME") + private Date handleJobTime; + /** + * 维护情况记录 + */ + @TableField("HANDLE_MESSAGE") + private String handleMessage; + /** + * 维护图片 + */ + @TableField("HANDLE_PHOTOS") + private String handlePhotos; + /** + * 工单流转记录 + */ + @TableField("FLOW") + private String flow; + + @TableField("JOB_BELONG_TO") + private Long jobBelongTo; + + @TableField("JOB_FLAG_DELAY") + private String jobFlagDelay; + + @TableField("JOB_FLAG_1") + private String jobFlag1; + + @TableField(exist = false) + private String alarmValue; + + @TableField(exist = false) + private String alarmContentName; + + @TableField(exist = false) + private Integer recordId; + + @Override + public String toString() { + return "AlarmJob{" + + "id=" + id + + ", jobcode=" + jobcode + + ", jogType=" + jobType + + ", wellCode=" + wellCode + + ", devcode=" + devcode + + ", createTime=" + createTime + + ", jobStatus=" + jobStatus + + ", getJobPerson=" + getJobPerson + + ", getJobTime=" + getJobTime + + ", firstState=" + firstState + + ", firstStatePhotos=" + firstStatePhotos + + ", confirmJobPerson=" + confirmJobPerson + + ", confrimJobTime=" + confrimJobTime + + ", handleJobPerson=" + handleJobPerson + + ", handleJobTime=" + handleJobTime + + ", handleMessage=" + handleMessage + + ", handlePhotos=" + handlePhotos + + ", flow=" + flow + + ", recordId=" + recordId + + "}"; + } +} diff --git a/src/main/java/com/casic/entity/AlarmRecords.java b/src/main/java/com/casic/entity/AlarmRecords.java new file mode 100644 index 0000000..3bc2cab --- /dev/null +++ b/src/main/java/com/casic/entity/AlarmRecords.java @@ -0,0 +1,108 @@ +package com.casic.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +import java.util.Date; + +/** + *

+ * + *

+ * + * @author casic123 + * @since 2019-05-17 + */ +@Data +@TableName("alarm_records") +public class AlarmRecords extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.AUTO) + private Long id; + /** + * 设备ID + */ + @TableField("DEVICE_ID") + private Long deviceId; + /** + * 设备编号 + */ + @TableField("DEVCODE") + private String devcode; + /** + * 闸井编号 + */ + @TableField("WELL_CODE") + private String wellCode; + /** + * 告警类型 + */ + @TableField("ALARM_TYPE") + private String alarmType; + /** + * 告警内容 + */ + @TableField("ALARM_CONTENT") + private String alarmContent; + /** + * 告警数值 + */ + @TableField("ALARM_VALUE") + private String alarmValue; + /** + * 告警等级 + */ + @TableField("ALARM_LEVEL") + private Integer alarmLevel; + /** + * 告警详情 + */ + @TableField("ALARM_MSG") + private String alarmMessage; + /** + * 告警时间 + */ + @TableField("ALARM_TIME") + private Date alarmTime; + /** + * 告警状态 + */ + @TableField("STATUS") + private String status; + /** + * 工单编号 + */ + @TableField("JOB_ID") + private Long jobId; + + @TableField(exist = false) + private Integer jobStatus; + + @Override + public String toString() { + return "AlarmRecords{" + + "id=" + id + + ", deviceId=" + deviceId + + ", devcode=" + devcode + + ", wellCode=" + wellCode + + ", alarmType=" + alarmType + + ", alarmContent=" + alarmContent + + ", alarmValue=" + alarmValue + + ", alarmLevel=" + alarmLevel + + ", alarmMessage=" + alarmMessage + + ", alarmTime=" + alarmTime + + ", status=" + status + + ", jobId=" + jobId + + ", jobStatus=" + jobStatus + + "}"; + } +} diff --git a/src/main/java/com/casic/entity/DataGasDector.java b/src/main/java/com/casic/entity/DataGasDector.java new file mode 100644 index 0000000..537789a --- /dev/null +++ b/src/main/java/com/casic/entity/DataGasDector.java @@ -0,0 +1,42 @@ +package com.casic.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.util.Date; + +/** + * @author cz + * @date 2022-7-1 + */ +@Data +@TableName("data_gas_dector") +public class DataGasDector { + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + private String devcode; + private String wellCode; + private String strength; + + private String descn; + /** + * --信号与干扰加噪声比 + */ + private String sinr; + /** + * --参考信号接收功率 + */ + private String rsrp; + /** + * --物理小区标识  + */ + private String pci; + private Date uptime; + private Date logtime; +} diff --git a/src/main/java/com/casic/entity/DataGasReport.java b/src/main/java/com/casic/entity/DataGasReport.java deleted file mode 100644 index c43ccdf..0000000 --- a/src/main/java/com/casic/entity/DataGasReport.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.casic.entity; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; - -import java.util.Date; - -/** - * @author cz - * @date 2022-7-1 - */ -@Data -@TableName("data_gas_dector") -public class DataGasReport { - /** - * 主键 - */ - @TableId(value = "id", type = IdType.AUTO) - private Integer id; - - @TableField("devcode") - private String imei; - private String wellcode; - - private String imsi; - /** - * --事件类型 0正常 1低报 2高报 - */ - private String gasSensorState; - /** - * --浓度值 - */ - private String gasSampleValue; - /** - * --信号与干扰加噪声比 - */ - private String sinr; - /** - * --参考信号接收功率 - */ - private String rsrp; - /** - * --物理小区标识  - */ - private String pci; - /** - * --心跳周期 - */ - private String heartbeatTime; - - /** - * --小区位置信息 - */ - private String cellId; - /** - * --电池电压 - */ - private String batteryVoltage; - /** - * --电池电量 - */ - private String batteryValue; - private String iccid; - private Date uptime; - private Date logtime; -} diff --git a/src/main/java/com/casic/model/DataContentParam.java b/src/main/java/com/casic/model/DataContentParam.java new file mode 100644 index 0000000..46d298a --- /dev/null +++ b/src/main/java/com/casic/model/DataContentParam.java @@ -0,0 +1,19 @@ +package com.casic.model; + +import lombok.Data; + +import java.util.List; + +@Data +public class DataContentParam { + private String msg_type; + private String error_val; + private String ch_cnt; + private String erro_cnt; + private String alarm_low_cnt; + private String alarm_high_cnt; + private String offline_cnt; + private List rtd_val; + private List adc_val; + private List status_val; +} \ No newline at end of file diff --git a/src/main/java/com/casic/model/DataReportParam.java b/src/main/java/com/casic/model/DataReportParam.java index 082814c..754f330 100644 --- a/src/main/java/com/casic/model/DataReportParam.java +++ b/src/main/java/com/casic/model/DataReportParam.java @@ -11,25 +11,12 @@ */ @Data public class DataReportParam { - private String upPacketSN; - private String upDataSN; - private String topic; - private String timestamp; - private String tenantId; - private String serviceId; - private String protocol; - private String productId; - /** - * gas_sensor_state = 1, --事件类型 0 正常 1 低报 2 高报 - * gas_sample_value = 11-- 浓度值 - */ - private Map payload; - private String messageType; private String deviceType; - private String deviceId; - private String assocAssetId; - @JsonProperty(value = "IMSI", required = true) - private String IMSI; - @JsonProperty(value = "IMEI", required = true) - private String IMEI; + private String iotId; + private String requestId; + private Object checkFailedData; + private String productKey; + private String gmtCreate; + private String deviceName; + private Object items; } diff --git a/src/main/java/com/casic/service/DeviceDataService.java b/src/main/java/com/casic/service/DeviceDataService.java index d883fe4..457d710 100644 --- a/src/main/java/com/casic/service/DeviceDataService.java +++ b/src/main/java/com/casic/service/DeviceDataService.java @@ -3,25 +3,18 @@ import com.casic.model.DataReportParam; import com.casic.model.HeartbeatParam; import com.casic.model.ResponseData; +import org.springframework.web.bind.annotation.RequestBody; /** * @author cz * @date 2022 */ public interface DeviceDataService { - /** * * @param dataReportParam * @return */ - ResponseData DeviceDataCommit(DataReportParam dataReportParam); - - /** - * - * @param heartbeatParam - * @return - */ - ResponseData heartBeatSave(HeartbeatParam heartbeatParam); + ResponseData gasReceiver(DataReportParam dataReportParam); } diff --git a/src/main/java/com/casic/controller/DeviceDataController.java b/src/main/java/com/casic/controller/DeviceDataController.java index e5351c9..971b258 100644 --- a/src/main/java/com/casic/controller/DeviceDataController.java +++ b/src/main/java/com/casic/controller/DeviceDataController.java @@ -1,7 +1,6 @@ package com.casic.controller; import com.casic.model.DataReportParam; -import com.casic.model.HeartbeatParam; import com.casic.model.ResponseData; import com.casic.service.DeviceDataService; import org.springframework.web.bind.annotation.PostMapping; @@ -19,19 +18,9 @@ this.dataService = dataService; } - @PostMapping("/commit") - public ResponseData DeviceDataCommit(@RequestBody DataReportParam dataReportParam) { - return dataService.DeviceDataCommit(dataReportParam); - } - - @PostMapping("/heartbeat") - public ResponseData heartBeat(@RequestBody HeartbeatParam heartbeatParam) { - return dataService.heartBeatSave(heartbeatParam); - } - @PostMapping("/gas/receiver") - public ResponseData gasReceiver(@RequestBody HeartbeatParam heartbeatParam) { - return dataService.heartBeatSave(heartbeatParam); + public ResponseData gasReceiver(@RequestBody DataReportParam dataReportParam) { + return dataService.gasReceiver(dataReportParam); } } diff --git a/src/main/java/com/casic/dao/AlarmJobMapper.java b/src/main/java/com/casic/dao/AlarmJobMapper.java new file mode 100644 index 0000000..e5e9c8d --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmJobMapper.java @@ -0,0 +1,17 @@ +package com.casic.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.AlarmJob; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +@Mapper +public interface AlarmJobMapper extends BaseMapper { + + @Select("SELECT MAX(jobcode) " + + "FROM alarm_job " + + "WHERE JOBCODE like '${jobcode}%'") + String getJobCodeMaxSerial(@Param("jobcode") String jobcode); + +} diff --git a/src/main/java/com/casic/dao/AlarmRecordsMapper.java b/src/main/java/com/casic/dao/AlarmRecordsMapper.java new file mode 100644 index 0000000..8da7dcb --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -0,0 +1,28 @@ +package com.casic.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.AlarmRecords; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +@Mapper +public interface AlarmRecordsMapper extends BaseMapper { + + + @Select("SELECT JOB_ID AS \"jobId\"\n " + + "FROM alarm_records\n " + + "WHERE DEVCODE = #{devcode}\n " + + "AND ALARM_CONTENT = #{MsgContent}\n " + + "AND STATUS='1'\n " + + "AND JOB_ID>0 ") + String isOldAlarmRecord(@Param("devcode") String devcode, @Param("MsgContent") String MsgContent); + + @Update(" UPDATE alarm_records\n" + + " SET STATUS='0'\n" + + " WHERE DEVCODE = #{devcode}\n" + + " AND ALARM_CONTENT = #{MsgContent}\n" + + " AND STATUS='1'") + Integer updateOldAlarmRecord(@Param("devcode") String devcode, @Param("MsgContent") String MsgContent); +} diff --git a/src/main/java/com/casic/dao/DataGasMapper.java b/src/main/java/com/casic/dao/DataGasMapper.java index 47e7cce..6e08811 100644 --- a/src/main/java/com/casic/dao/DataGasMapper.java +++ b/src/main/java/com/casic/dao/DataGasMapper.java @@ -1,9 +1,41 @@ package com.casic.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.casic.entity.DataGasReport; +import com.casic.entity.DataGasDector; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +import java.util.List; +import java.util.Map; @Mapper -public interface DataGasMapper extends BaseMapper { +public interface DataGasMapper extends BaseMapper { + + @Select("select bd.id as \"deviceId\" " + + "from bus_device_well bdw " + + "join (select id from bus_device where devcode=#{devcode}) bd ON bd.id=bdw.device_id " + + "join bus_well_info bwi ON bwi.id=bdw.well_id ") + Map getWellCode(@Param("devcode") String devcode); + + @Update("UPDATE bus_device" + + "SET ONLINE_STATE=0" + + "WHERE devcode=#{devcode} ") + void setOfflineByDevcode(@Param("devcode") String devcode); + + @Select("SELECT level,high_value " + + "FROM alarm_level " + + "WHERE device_type=#{deviceType} ") + List> getAlarmLevelList(@Param("deviceType") String deviceType); + + @Select("SELECT devcode " + + "FROM data_gas_dector " + + "WHERE devcode=#{devcode} " + + "AND date_part('minute',now()-uptime) < ${minutes}" + + "ORDER BY uptime DESC " + + "LIMIT 1") + String getLastData(@Param("minutes") String minutes, + @Param("devcode") String devcode); + } diff --git a/src/main/java/com/casic/dao/impl/AlarmJobDao.java b/src/main/java/com/casic/dao/impl/AlarmJobDao.java new file mode 100644 index 0000000..3a2a424 --- /dev/null +++ b/src/main/java/com/casic/dao/impl/AlarmJobDao.java @@ -0,0 +1,54 @@ +package com.casic.dao.impl; + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.AlarmJobMapper; +import com.casic.entity.AlarmJob; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Component +public class AlarmJobDao { + + public static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyyMMdd"); + + @Resource + private AlarmJobMapper alarmJobMapper; + + public AlarmJob saveData(String devCode, String wellCode, String devTypeName, String jobType) { + AlarmJob alarmJob = new AlarmJob(); + alarmJob.setDevcode(devCode); + alarmJob.setWellCode(wellCode); + alarmJob.setJobStatus("0"); + alarmJob.setCreateTime(new Date()); + alarmJob.setJobcode(this.produceJobCode(devTypeName)); + alarmJob.setJobType(jobType); + alarmJobMapper.insert(alarmJob); + return alarmJob; + } + + /** + * 前缀+日期+4位流水号 + * + * @param devTypeName + * @return + */ + private String produceJobCode(String devTypeName) { + String pre = devTypeName; + String dataStr = sdf6.format(new Date()); + String fix = this.getJobCodeMaxSerial(pre + dataStr); + return StringUtils.isEmpty(fix) ? pre + dataStr + String.format("%04d", Long.valueOf(fix) + 1L) : pre + dataStr + "0001"; + } + + + private String getJobCodeMaxSerial(String jobcode) { + String MaxSerialJobCode = alarmJobMapper.getJobCodeMaxSerial(jobcode); + String fix = ""; + if (null != MaxSerialJobCode && MaxSerialJobCode.length() > 4) { + fix = MaxSerialJobCode.substring(MaxSerialJobCode.length() - 4); + } + return fix; + } +} diff --git a/src/main/java/com/casic/dao/impl/DeviceDataMapper.java b/src/main/java/com/casic/dao/impl/DeviceDataMapper.java deleted file mode 100644 index c797e55..0000000 --- a/src/main/java/com/casic/dao/impl/DeviceDataMapper.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.casic.dao.impl; - -import com.alibaba.fastjson.JSON; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; -import com.casic.dao.DataGasMapper; -import com.casic.entity.DataGasReport; -import com.casic.model.DataReportParam; -import com.casic.model.HeartbeatParam; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import javax.management.Query; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.time.DateTimeException; -import java.util.*; - -@Slf4j -@Component -public class DeviceDataMapper { - @Autowired - DataGasMapper dataGasMapper; - - public int addDeviceData(DataReportParam dataReportParam) { - DataGasReport dataGasReport = new DataGasReport(); - dataGasReport.setImei(dataReportParam.getIMEI()); - dataGasReport.setImsi(dataReportParam.getIMSI()); - try { - dataGasReport.setUptime(new Date(Long.valueOf(dataReportParam.getTimestamp()))); - } catch (DateTimeException dex) { - log.error("主题,日期转换出错,时间戳为{},异常信息为{}", dataReportParam.getTimestamp(), dex); - } - dataGasReport.setGasSampleValue(dataReportParam.getPayload().get("gas_sensor_state").toString()); - dataGasReport.setGasSensorState(dataReportParam.getPayload().get("gas_sample_value").toString()); - dataGasReport.setLogtime(new Date()); - return dataGasMapper.insert(dataGasReport); - } - - public int editDeviceData(HeartbeatParam heartbeatParam) { - DataGasReport dataGasReport = new DataGasReport(); - dataGasReport.setImei(heartbeatParam.getIMEI()); - dataGasReport.setImsi(heartbeatParam.getIMSI()); - //电池电压-电池点亮 - dataGasReport.setBatteryVoltage(heartbeatParam.getBattery_voltage()); - dataGasReport.setBatteryValue(heartbeatParam.getBattery_value()); - // - dataGasReport.setCellId(heartbeatParam.getCell_id()); - dataGasReport.setIccid(heartbeatParam.getICCID()); - //噪音、接收功率、小区标识 - dataGasReport.setPci(heartbeatParam.getPci()); - dataGasReport.setRsrp(heartbeatParam.getRsrp()); - dataGasReport.setSinr(heartbeatParam.getSinr()); - dataGasReport.setHeartbeatTime(heartbeatParam.getHeartbeat_time()); - QueryWrapper queryWrapper = new QueryWrapper() - .eq("DEVCODE", heartbeatParam.getIMEI()) - .orderByDesc("LOGTIME").last("limit 1"); - List dataGasReportList = dataGasMapper.selectList(queryWrapper); - if (dataGasReportList.size() == 0) { - return 0; - } else { - dataGasReport.setId(dataGasReportList.get(0).getId()); - } - return dataGasMapper.updateById(dataGasReport); - } - -} diff --git a/src/main/java/com/casic/entity/AlarmJob.java b/src/main/java/com/casic/entity/AlarmJob.java new file mode 100644 index 0000000..65a6096 --- /dev/null +++ b/src/main/java/com/casic/entity/AlarmJob.java @@ -0,0 +1,165 @@ +package com.casic.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 报警工单表 + *

+ * + * @author casic123 + * @since 2019-05-17 + */ +@Data +@TableName("alarm_job") +public class AlarmJob extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.AUTO) + private Long id; + /** + * 工单编号 + */ + @TableField("JOBCODE") + private String jobcode; + /** + * 工单类型 + */ + @TableField("JOG_TYPE") + private String jobType; + /** + * 井编号 + */ + @TableField("WELL_CODE") + private String wellCode; + /** + * 设备编号 + */ + @TableField("DEVCODE") + private String devcode; + /** + * 工单创建时间 + */ + @TableField("CREATE_TIME") + private Date createTime; + /** + * 工单状态(0待处理,1待确认,2处理中,3完成) + */ + @TableField("JOB_STATUS") + private String jobStatus; + /** + * 接单人员 + */ + @TableField("GET_JOB_PERSON") + private Long getJobPerson; + /** + * 接单时间 + */ + @TableField("GET_JOB_TIME") + private Date getJobTime; + /** + * 应接单时间 + */ + @TableField("SHOULD_GET_TIME") + private Date shouldGetTime; + /** + * 第一现场情况 + */ + @TableField("FIRST_STATE") + private String firstState; + /** + * 第一现场照片 + */ + @TableField("FIRST_STATE_PHOTOS") + private String firstStatePhotos; + /** + * 确认人员 + */ + @TableField("CONFIRM_JOB_PERSON") + private Long confirmJobPerson; + /** + * 确认时间 + */ + @TableField("CONFRIM_JOB_TIME") + private Date confrimJobTime; + /** + * 处理人员 + */ + @TableField("HANDLE_JOB_Person") + private Long handleJobPerson; + /** + * 处理时间 + */ + @TableField("HANDLE_JOB_TIME") + private Date handleJobTime; + /** + * 维护情况记录 + */ + @TableField("HANDLE_MESSAGE") + private String handleMessage; + /** + * 维护图片 + */ + @TableField("HANDLE_PHOTOS") + private String handlePhotos; + /** + * 工单流转记录 + */ + @TableField("FLOW") + private String flow; + + @TableField("JOB_BELONG_TO") + private Long jobBelongTo; + + @TableField("JOB_FLAG_DELAY") + private String jobFlagDelay; + + @TableField("JOB_FLAG_1") + private String jobFlag1; + + @TableField(exist = false) + private String alarmValue; + + @TableField(exist = false) + private String alarmContentName; + + @TableField(exist = false) + private Integer recordId; + + @Override + public String toString() { + return "AlarmJob{" + + "id=" + id + + ", jobcode=" + jobcode + + ", jogType=" + jobType + + ", wellCode=" + wellCode + + ", devcode=" + devcode + + ", createTime=" + createTime + + ", jobStatus=" + jobStatus + + ", getJobPerson=" + getJobPerson + + ", getJobTime=" + getJobTime + + ", firstState=" + firstState + + ", firstStatePhotos=" + firstStatePhotos + + ", confirmJobPerson=" + confirmJobPerson + + ", confrimJobTime=" + confrimJobTime + + ", handleJobPerson=" + handleJobPerson + + ", handleJobTime=" + handleJobTime + + ", handleMessage=" + handleMessage + + ", handlePhotos=" + handlePhotos + + ", flow=" + flow + + ", recordId=" + recordId + + "}"; + } +} diff --git a/src/main/java/com/casic/entity/AlarmRecords.java b/src/main/java/com/casic/entity/AlarmRecords.java new file mode 100644 index 0000000..3bc2cab --- /dev/null +++ b/src/main/java/com/casic/entity/AlarmRecords.java @@ -0,0 +1,108 @@ +package com.casic.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +import java.util.Date; + +/** + *

+ * + *

+ * + * @author casic123 + * @since 2019-05-17 + */ +@Data +@TableName("alarm_records") +public class AlarmRecords extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.AUTO) + private Long id; + /** + * 设备ID + */ + @TableField("DEVICE_ID") + private Long deviceId; + /** + * 设备编号 + */ + @TableField("DEVCODE") + private String devcode; + /** + * 闸井编号 + */ + @TableField("WELL_CODE") + private String wellCode; + /** + * 告警类型 + */ + @TableField("ALARM_TYPE") + private String alarmType; + /** + * 告警内容 + */ + @TableField("ALARM_CONTENT") + private String alarmContent; + /** + * 告警数值 + */ + @TableField("ALARM_VALUE") + private String alarmValue; + /** + * 告警等级 + */ + @TableField("ALARM_LEVEL") + private Integer alarmLevel; + /** + * 告警详情 + */ + @TableField("ALARM_MSG") + private String alarmMessage; + /** + * 告警时间 + */ + @TableField("ALARM_TIME") + private Date alarmTime; + /** + * 告警状态 + */ + @TableField("STATUS") + private String status; + /** + * 工单编号 + */ + @TableField("JOB_ID") + private Long jobId; + + @TableField(exist = false) + private Integer jobStatus; + + @Override + public String toString() { + return "AlarmRecords{" + + "id=" + id + + ", deviceId=" + deviceId + + ", devcode=" + devcode + + ", wellCode=" + wellCode + + ", alarmType=" + alarmType + + ", alarmContent=" + alarmContent + + ", alarmValue=" + alarmValue + + ", alarmLevel=" + alarmLevel + + ", alarmMessage=" + alarmMessage + + ", alarmTime=" + alarmTime + + ", status=" + status + + ", jobId=" + jobId + + ", jobStatus=" + jobStatus + + "}"; + } +} diff --git a/src/main/java/com/casic/entity/DataGasDector.java b/src/main/java/com/casic/entity/DataGasDector.java new file mode 100644 index 0000000..537789a --- /dev/null +++ b/src/main/java/com/casic/entity/DataGasDector.java @@ -0,0 +1,42 @@ +package com.casic.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.util.Date; + +/** + * @author cz + * @date 2022-7-1 + */ +@Data +@TableName("data_gas_dector") +public class DataGasDector { + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + private String devcode; + private String wellCode; + private String strength; + + private String descn; + /** + * --信号与干扰加噪声比 + */ + private String sinr; + /** + * --参考信号接收功率 + */ + private String rsrp; + /** + * --物理小区标识  + */ + private String pci; + private Date uptime; + private Date logtime; +} diff --git a/src/main/java/com/casic/entity/DataGasReport.java b/src/main/java/com/casic/entity/DataGasReport.java deleted file mode 100644 index c43ccdf..0000000 --- a/src/main/java/com/casic/entity/DataGasReport.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.casic.entity; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; - -import java.util.Date; - -/** - * @author cz - * @date 2022-7-1 - */ -@Data -@TableName("data_gas_dector") -public class DataGasReport { - /** - * 主键 - */ - @TableId(value = "id", type = IdType.AUTO) - private Integer id; - - @TableField("devcode") - private String imei; - private String wellcode; - - private String imsi; - /** - * --事件类型 0正常 1低报 2高报 - */ - private String gasSensorState; - /** - * --浓度值 - */ - private String gasSampleValue; - /** - * --信号与干扰加噪声比 - */ - private String sinr; - /** - * --参考信号接收功率 - */ - private String rsrp; - /** - * --物理小区标识  - */ - private String pci; - /** - * --心跳周期 - */ - private String heartbeatTime; - - /** - * --小区位置信息 - */ - private String cellId; - /** - * --电池电压 - */ - private String batteryVoltage; - /** - * --电池电量 - */ - private String batteryValue; - private String iccid; - private Date uptime; - private Date logtime; -} diff --git a/src/main/java/com/casic/model/DataContentParam.java b/src/main/java/com/casic/model/DataContentParam.java new file mode 100644 index 0000000..46d298a --- /dev/null +++ b/src/main/java/com/casic/model/DataContentParam.java @@ -0,0 +1,19 @@ +package com.casic.model; + +import lombok.Data; + +import java.util.List; + +@Data +public class DataContentParam { + private String msg_type; + private String error_val; + private String ch_cnt; + private String erro_cnt; + private String alarm_low_cnt; + private String alarm_high_cnt; + private String offline_cnt; + private List rtd_val; + private List adc_val; + private List status_val; +} \ No newline at end of file diff --git a/src/main/java/com/casic/model/DataReportParam.java b/src/main/java/com/casic/model/DataReportParam.java index 082814c..754f330 100644 --- a/src/main/java/com/casic/model/DataReportParam.java +++ b/src/main/java/com/casic/model/DataReportParam.java @@ -11,25 +11,12 @@ */ @Data public class DataReportParam { - private String upPacketSN; - private String upDataSN; - private String topic; - private String timestamp; - private String tenantId; - private String serviceId; - private String protocol; - private String productId; - /** - * gas_sensor_state = 1, --事件类型 0 正常 1 低报 2 高报 - * gas_sample_value = 11-- 浓度值 - */ - private Map payload; - private String messageType; private String deviceType; - private String deviceId; - private String assocAssetId; - @JsonProperty(value = "IMSI", required = true) - private String IMSI; - @JsonProperty(value = "IMEI", required = true) - private String IMEI; + private String iotId; + private String requestId; + private Object checkFailedData; + private String productKey; + private String gmtCreate; + private String deviceName; + private Object items; } diff --git a/src/main/java/com/casic/service/DeviceDataService.java b/src/main/java/com/casic/service/DeviceDataService.java index d883fe4..457d710 100644 --- a/src/main/java/com/casic/service/DeviceDataService.java +++ b/src/main/java/com/casic/service/DeviceDataService.java @@ -3,25 +3,18 @@ import com.casic.model.DataReportParam; import com.casic.model.HeartbeatParam; import com.casic.model.ResponseData; +import org.springframework.web.bind.annotation.RequestBody; /** * @author cz * @date 2022 */ public interface DeviceDataService { - /** * * @param dataReportParam * @return */ - ResponseData DeviceDataCommit(DataReportParam dataReportParam); - - /** - * - * @param heartbeatParam - * @return - */ - ResponseData heartBeatSave(HeartbeatParam heartbeatParam); + ResponseData gasReceiver(DataReportParam dataReportParam); } diff --git a/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java index 93f0685..bb018df 100644 --- a/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java +++ b/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java @@ -1,58 +1,49 @@ package com.casic.service.impl; -import com.casic.dao.impl.DeviceDataMapper; +import com.alibaba.druid.util.StringUtils; +import com.alibaba.fastjson.JSON; import com.casic.model.*; import com.casic.service.DeviceDataService; +import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; +import java.util.Map; + /** * @author cz - * @date 2022-6-20 + * @date 2022-9-26 */ @Slf4j @Service public class DeviceDataServiceImpl implements DeviceDataService { - @Autowired - DeviceDataMapper deviceDataMapper; + private final NormalDataProcessor normalDataProcessor; - /** - * @param dataReportParam - * @return - */ - public ResponseData DeviceDataCommit(DataReportParam dataReportParam) { - ResponseData responseData = new ResponseData(); - try { - deviceDataMapper.addDeviceData(dataReportParam); - responseData.setCode(ResponseData.DEFAULT_SUCCESS_CODE); - responseData.setMessage(ResponseData.DEFAULT_SUCCESS_MESSAGE); - } catch (DataAccessException sqlex) { - responseData.setCode(ResponseData.DEFAULT_ERROR_CODE); - responseData.setMessage("请求数据异常"); - responseData.setSuccess(true); - log.error("主题:数据上报保存出现错误,异常信息为{}", sqlex); - } - return responseData; + public DeviceDataServiceImpl(NormalDataProcessor normalDataProcessor) { + this.normalDataProcessor = normalDataProcessor; } - /** - * @param heartbeatParam - * @return - */ - public ResponseData heartBeatSave(HeartbeatParam heartbeatParam) { + public ResponseData gasReceiver(DataReportParam dataReportParam) { ResponseData responseData = new ResponseData(); try { - deviceDataMapper.editDeviceData(heartbeatParam); + Map> updDataMap = new ObjectMapper().convertValue(dataReportParam.getItems(), Map.class); + DataContentParam dataContentParam = JSON.parseObject(updDataMap.get("upd_data").get("value"), DataContentParam.class); + Long uptime = Long.valueOf(String.valueOf(updDataMap.get("upd_data").get("time"))); + if (StringUtils.isEmpty(dataReportParam.getDeviceName())) { + responseData.setCode(200); + responseData.setMessage("没有设备编号"); + return responseData; + } + normalDataProcessor.normalDataProvider(dataContentParam, uptime, dataReportParam.getDeviceName()); responseData.setCode(ResponseData.DEFAULT_SUCCESS_CODE); responseData.setMessage(ResponseData.DEFAULT_SUCCESS_MESSAGE); } catch (DataAccessException sqlex) { responseData.setCode(ResponseData.DEFAULT_ERROR_CODE); responseData.setMessage("请求数据异常"); responseData.setSuccess(true); - log.error("主题:数据心跳出现错误,异常信息为{}", sqlex); + log.error("主题:设备数据上报出现错误,异常信息为{}", sqlex); } return responseData; } diff --git a/src/main/java/com/casic/controller/DeviceDataController.java b/src/main/java/com/casic/controller/DeviceDataController.java index e5351c9..971b258 100644 --- a/src/main/java/com/casic/controller/DeviceDataController.java +++ b/src/main/java/com/casic/controller/DeviceDataController.java @@ -1,7 +1,6 @@ package com.casic.controller; import com.casic.model.DataReportParam; -import com.casic.model.HeartbeatParam; import com.casic.model.ResponseData; import com.casic.service.DeviceDataService; import org.springframework.web.bind.annotation.PostMapping; @@ -19,19 +18,9 @@ this.dataService = dataService; } - @PostMapping("/commit") - public ResponseData DeviceDataCommit(@RequestBody DataReportParam dataReportParam) { - return dataService.DeviceDataCommit(dataReportParam); - } - - @PostMapping("/heartbeat") - public ResponseData heartBeat(@RequestBody HeartbeatParam heartbeatParam) { - return dataService.heartBeatSave(heartbeatParam); - } - @PostMapping("/gas/receiver") - public ResponseData gasReceiver(@RequestBody HeartbeatParam heartbeatParam) { - return dataService.heartBeatSave(heartbeatParam); + public ResponseData gasReceiver(@RequestBody DataReportParam dataReportParam) { + return dataService.gasReceiver(dataReportParam); } } diff --git a/src/main/java/com/casic/dao/AlarmJobMapper.java b/src/main/java/com/casic/dao/AlarmJobMapper.java new file mode 100644 index 0000000..e5e9c8d --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmJobMapper.java @@ -0,0 +1,17 @@ +package com.casic.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.AlarmJob; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +@Mapper +public interface AlarmJobMapper extends BaseMapper { + + @Select("SELECT MAX(jobcode) " + + "FROM alarm_job " + + "WHERE JOBCODE like '${jobcode}%'") + String getJobCodeMaxSerial(@Param("jobcode") String jobcode); + +} diff --git a/src/main/java/com/casic/dao/AlarmRecordsMapper.java b/src/main/java/com/casic/dao/AlarmRecordsMapper.java new file mode 100644 index 0000000..8da7dcb --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -0,0 +1,28 @@ +package com.casic.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.AlarmRecords; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +@Mapper +public interface AlarmRecordsMapper extends BaseMapper { + + + @Select("SELECT JOB_ID AS \"jobId\"\n " + + "FROM alarm_records\n " + + "WHERE DEVCODE = #{devcode}\n " + + "AND ALARM_CONTENT = #{MsgContent}\n " + + "AND STATUS='1'\n " + + "AND JOB_ID>0 ") + String isOldAlarmRecord(@Param("devcode") String devcode, @Param("MsgContent") String MsgContent); + + @Update(" UPDATE alarm_records\n" + + " SET STATUS='0'\n" + + " WHERE DEVCODE = #{devcode}\n" + + " AND ALARM_CONTENT = #{MsgContent}\n" + + " AND STATUS='1'") + Integer updateOldAlarmRecord(@Param("devcode") String devcode, @Param("MsgContent") String MsgContent); +} diff --git a/src/main/java/com/casic/dao/DataGasMapper.java b/src/main/java/com/casic/dao/DataGasMapper.java index 47e7cce..6e08811 100644 --- a/src/main/java/com/casic/dao/DataGasMapper.java +++ b/src/main/java/com/casic/dao/DataGasMapper.java @@ -1,9 +1,41 @@ package com.casic.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.casic.entity.DataGasReport; +import com.casic.entity.DataGasDector; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +import java.util.List; +import java.util.Map; @Mapper -public interface DataGasMapper extends BaseMapper { +public interface DataGasMapper extends BaseMapper { + + @Select("select bd.id as \"deviceId\" " + + "from bus_device_well bdw " + + "join (select id from bus_device where devcode=#{devcode}) bd ON bd.id=bdw.device_id " + + "join bus_well_info bwi ON bwi.id=bdw.well_id ") + Map getWellCode(@Param("devcode") String devcode); + + @Update("UPDATE bus_device" + + "SET ONLINE_STATE=0" + + "WHERE devcode=#{devcode} ") + void setOfflineByDevcode(@Param("devcode") String devcode); + + @Select("SELECT level,high_value " + + "FROM alarm_level " + + "WHERE device_type=#{deviceType} ") + List> getAlarmLevelList(@Param("deviceType") String deviceType); + + @Select("SELECT devcode " + + "FROM data_gas_dector " + + "WHERE devcode=#{devcode} " + + "AND date_part('minute',now()-uptime) < ${minutes}" + + "ORDER BY uptime DESC " + + "LIMIT 1") + String getLastData(@Param("minutes") String minutes, + @Param("devcode") String devcode); + } diff --git a/src/main/java/com/casic/dao/impl/AlarmJobDao.java b/src/main/java/com/casic/dao/impl/AlarmJobDao.java new file mode 100644 index 0000000..3a2a424 --- /dev/null +++ b/src/main/java/com/casic/dao/impl/AlarmJobDao.java @@ -0,0 +1,54 @@ +package com.casic.dao.impl; + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.AlarmJobMapper; +import com.casic.entity.AlarmJob; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Component +public class AlarmJobDao { + + public static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyyMMdd"); + + @Resource + private AlarmJobMapper alarmJobMapper; + + public AlarmJob saveData(String devCode, String wellCode, String devTypeName, String jobType) { + AlarmJob alarmJob = new AlarmJob(); + alarmJob.setDevcode(devCode); + alarmJob.setWellCode(wellCode); + alarmJob.setJobStatus("0"); + alarmJob.setCreateTime(new Date()); + alarmJob.setJobcode(this.produceJobCode(devTypeName)); + alarmJob.setJobType(jobType); + alarmJobMapper.insert(alarmJob); + return alarmJob; + } + + /** + * 前缀+日期+4位流水号 + * + * @param devTypeName + * @return + */ + private String produceJobCode(String devTypeName) { + String pre = devTypeName; + String dataStr = sdf6.format(new Date()); + String fix = this.getJobCodeMaxSerial(pre + dataStr); + return StringUtils.isEmpty(fix) ? pre + dataStr + String.format("%04d", Long.valueOf(fix) + 1L) : pre + dataStr + "0001"; + } + + + private String getJobCodeMaxSerial(String jobcode) { + String MaxSerialJobCode = alarmJobMapper.getJobCodeMaxSerial(jobcode); + String fix = ""; + if (null != MaxSerialJobCode && MaxSerialJobCode.length() > 4) { + fix = MaxSerialJobCode.substring(MaxSerialJobCode.length() - 4); + } + return fix; + } +} diff --git a/src/main/java/com/casic/dao/impl/DeviceDataMapper.java b/src/main/java/com/casic/dao/impl/DeviceDataMapper.java deleted file mode 100644 index c797e55..0000000 --- a/src/main/java/com/casic/dao/impl/DeviceDataMapper.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.casic.dao.impl; - -import com.alibaba.fastjson.JSON; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; -import com.casic.dao.DataGasMapper; -import com.casic.entity.DataGasReport; -import com.casic.model.DataReportParam; -import com.casic.model.HeartbeatParam; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import javax.management.Query; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.time.DateTimeException; -import java.util.*; - -@Slf4j -@Component -public class DeviceDataMapper { - @Autowired - DataGasMapper dataGasMapper; - - public int addDeviceData(DataReportParam dataReportParam) { - DataGasReport dataGasReport = new DataGasReport(); - dataGasReport.setImei(dataReportParam.getIMEI()); - dataGasReport.setImsi(dataReportParam.getIMSI()); - try { - dataGasReport.setUptime(new Date(Long.valueOf(dataReportParam.getTimestamp()))); - } catch (DateTimeException dex) { - log.error("主题,日期转换出错,时间戳为{},异常信息为{}", dataReportParam.getTimestamp(), dex); - } - dataGasReport.setGasSampleValue(dataReportParam.getPayload().get("gas_sensor_state").toString()); - dataGasReport.setGasSensorState(dataReportParam.getPayload().get("gas_sample_value").toString()); - dataGasReport.setLogtime(new Date()); - return dataGasMapper.insert(dataGasReport); - } - - public int editDeviceData(HeartbeatParam heartbeatParam) { - DataGasReport dataGasReport = new DataGasReport(); - dataGasReport.setImei(heartbeatParam.getIMEI()); - dataGasReport.setImsi(heartbeatParam.getIMSI()); - //电池电压-电池点亮 - dataGasReport.setBatteryVoltage(heartbeatParam.getBattery_voltage()); - dataGasReport.setBatteryValue(heartbeatParam.getBattery_value()); - // - dataGasReport.setCellId(heartbeatParam.getCell_id()); - dataGasReport.setIccid(heartbeatParam.getICCID()); - //噪音、接收功率、小区标识 - dataGasReport.setPci(heartbeatParam.getPci()); - dataGasReport.setRsrp(heartbeatParam.getRsrp()); - dataGasReport.setSinr(heartbeatParam.getSinr()); - dataGasReport.setHeartbeatTime(heartbeatParam.getHeartbeat_time()); - QueryWrapper queryWrapper = new QueryWrapper() - .eq("DEVCODE", heartbeatParam.getIMEI()) - .orderByDesc("LOGTIME").last("limit 1"); - List dataGasReportList = dataGasMapper.selectList(queryWrapper); - if (dataGasReportList.size() == 0) { - return 0; - } else { - dataGasReport.setId(dataGasReportList.get(0).getId()); - } - return dataGasMapper.updateById(dataGasReport); - } - -} diff --git a/src/main/java/com/casic/entity/AlarmJob.java b/src/main/java/com/casic/entity/AlarmJob.java new file mode 100644 index 0000000..65a6096 --- /dev/null +++ b/src/main/java/com/casic/entity/AlarmJob.java @@ -0,0 +1,165 @@ +package com.casic.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 报警工单表 + *

+ * + * @author casic123 + * @since 2019-05-17 + */ +@Data +@TableName("alarm_job") +public class AlarmJob extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.AUTO) + private Long id; + /** + * 工单编号 + */ + @TableField("JOBCODE") + private String jobcode; + /** + * 工单类型 + */ + @TableField("JOG_TYPE") + private String jobType; + /** + * 井编号 + */ + @TableField("WELL_CODE") + private String wellCode; + /** + * 设备编号 + */ + @TableField("DEVCODE") + private String devcode; + /** + * 工单创建时间 + */ + @TableField("CREATE_TIME") + private Date createTime; + /** + * 工单状态(0待处理,1待确认,2处理中,3完成) + */ + @TableField("JOB_STATUS") + private String jobStatus; + /** + * 接单人员 + */ + @TableField("GET_JOB_PERSON") + private Long getJobPerson; + /** + * 接单时间 + */ + @TableField("GET_JOB_TIME") + private Date getJobTime; + /** + * 应接单时间 + */ + @TableField("SHOULD_GET_TIME") + private Date shouldGetTime; + /** + * 第一现场情况 + */ + @TableField("FIRST_STATE") + private String firstState; + /** + * 第一现场照片 + */ + @TableField("FIRST_STATE_PHOTOS") + private String firstStatePhotos; + /** + * 确认人员 + */ + @TableField("CONFIRM_JOB_PERSON") + private Long confirmJobPerson; + /** + * 确认时间 + */ + @TableField("CONFRIM_JOB_TIME") + private Date confrimJobTime; + /** + * 处理人员 + */ + @TableField("HANDLE_JOB_Person") + private Long handleJobPerson; + /** + * 处理时间 + */ + @TableField("HANDLE_JOB_TIME") + private Date handleJobTime; + /** + * 维护情况记录 + */ + @TableField("HANDLE_MESSAGE") + private String handleMessage; + /** + * 维护图片 + */ + @TableField("HANDLE_PHOTOS") + private String handlePhotos; + /** + * 工单流转记录 + */ + @TableField("FLOW") + private String flow; + + @TableField("JOB_BELONG_TO") + private Long jobBelongTo; + + @TableField("JOB_FLAG_DELAY") + private String jobFlagDelay; + + @TableField("JOB_FLAG_1") + private String jobFlag1; + + @TableField(exist = false) + private String alarmValue; + + @TableField(exist = false) + private String alarmContentName; + + @TableField(exist = false) + private Integer recordId; + + @Override + public String toString() { + return "AlarmJob{" + + "id=" + id + + ", jobcode=" + jobcode + + ", jogType=" + jobType + + ", wellCode=" + wellCode + + ", devcode=" + devcode + + ", createTime=" + createTime + + ", jobStatus=" + jobStatus + + ", getJobPerson=" + getJobPerson + + ", getJobTime=" + getJobTime + + ", firstState=" + firstState + + ", firstStatePhotos=" + firstStatePhotos + + ", confirmJobPerson=" + confirmJobPerson + + ", confrimJobTime=" + confrimJobTime + + ", handleJobPerson=" + handleJobPerson + + ", handleJobTime=" + handleJobTime + + ", handleMessage=" + handleMessage + + ", handlePhotos=" + handlePhotos + + ", flow=" + flow + + ", recordId=" + recordId + + "}"; + } +} diff --git a/src/main/java/com/casic/entity/AlarmRecords.java b/src/main/java/com/casic/entity/AlarmRecords.java new file mode 100644 index 0000000..3bc2cab --- /dev/null +++ b/src/main/java/com/casic/entity/AlarmRecords.java @@ -0,0 +1,108 @@ +package com.casic.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +import java.util.Date; + +/** + *

+ * + *

+ * + * @author casic123 + * @since 2019-05-17 + */ +@Data +@TableName("alarm_records") +public class AlarmRecords extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.AUTO) + private Long id; + /** + * 设备ID + */ + @TableField("DEVICE_ID") + private Long deviceId; + /** + * 设备编号 + */ + @TableField("DEVCODE") + private String devcode; + /** + * 闸井编号 + */ + @TableField("WELL_CODE") + private String wellCode; + /** + * 告警类型 + */ + @TableField("ALARM_TYPE") + private String alarmType; + /** + * 告警内容 + */ + @TableField("ALARM_CONTENT") + private String alarmContent; + /** + * 告警数值 + */ + @TableField("ALARM_VALUE") + private String alarmValue; + /** + * 告警等级 + */ + @TableField("ALARM_LEVEL") + private Integer alarmLevel; + /** + * 告警详情 + */ + @TableField("ALARM_MSG") + private String alarmMessage; + /** + * 告警时间 + */ + @TableField("ALARM_TIME") + private Date alarmTime; + /** + * 告警状态 + */ + @TableField("STATUS") + private String status; + /** + * 工单编号 + */ + @TableField("JOB_ID") + private Long jobId; + + @TableField(exist = false) + private Integer jobStatus; + + @Override + public String toString() { + return "AlarmRecords{" + + "id=" + id + + ", deviceId=" + deviceId + + ", devcode=" + devcode + + ", wellCode=" + wellCode + + ", alarmType=" + alarmType + + ", alarmContent=" + alarmContent + + ", alarmValue=" + alarmValue + + ", alarmLevel=" + alarmLevel + + ", alarmMessage=" + alarmMessage + + ", alarmTime=" + alarmTime + + ", status=" + status + + ", jobId=" + jobId + + ", jobStatus=" + jobStatus + + "}"; + } +} diff --git a/src/main/java/com/casic/entity/DataGasDector.java b/src/main/java/com/casic/entity/DataGasDector.java new file mode 100644 index 0000000..537789a --- /dev/null +++ b/src/main/java/com/casic/entity/DataGasDector.java @@ -0,0 +1,42 @@ +package com.casic.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.util.Date; + +/** + * @author cz + * @date 2022-7-1 + */ +@Data +@TableName("data_gas_dector") +public class DataGasDector { + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + private String devcode; + private String wellCode; + private String strength; + + private String descn; + /** + * --信号与干扰加噪声比 + */ + private String sinr; + /** + * --参考信号接收功率 + */ + private String rsrp; + /** + * --物理小区标识  + */ + private String pci; + private Date uptime; + private Date logtime; +} diff --git a/src/main/java/com/casic/entity/DataGasReport.java b/src/main/java/com/casic/entity/DataGasReport.java deleted file mode 100644 index c43ccdf..0000000 --- a/src/main/java/com/casic/entity/DataGasReport.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.casic.entity; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; - -import java.util.Date; - -/** - * @author cz - * @date 2022-7-1 - */ -@Data -@TableName("data_gas_dector") -public class DataGasReport { - /** - * 主键 - */ - @TableId(value = "id", type = IdType.AUTO) - private Integer id; - - @TableField("devcode") - private String imei; - private String wellcode; - - private String imsi; - /** - * --事件类型 0正常 1低报 2高报 - */ - private String gasSensorState; - /** - * --浓度值 - */ - private String gasSampleValue; - /** - * --信号与干扰加噪声比 - */ - private String sinr; - /** - * --参考信号接收功率 - */ - private String rsrp; - /** - * --物理小区标识  - */ - private String pci; - /** - * --心跳周期 - */ - private String heartbeatTime; - - /** - * --小区位置信息 - */ - private String cellId; - /** - * --电池电压 - */ - private String batteryVoltage; - /** - * --电池电量 - */ - private String batteryValue; - private String iccid; - private Date uptime; - private Date logtime; -} diff --git a/src/main/java/com/casic/model/DataContentParam.java b/src/main/java/com/casic/model/DataContentParam.java new file mode 100644 index 0000000..46d298a --- /dev/null +++ b/src/main/java/com/casic/model/DataContentParam.java @@ -0,0 +1,19 @@ +package com.casic.model; + +import lombok.Data; + +import java.util.List; + +@Data +public class DataContentParam { + private String msg_type; + private String error_val; + private String ch_cnt; + private String erro_cnt; + private String alarm_low_cnt; + private String alarm_high_cnt; + private String offline_cnt; + private List rtd_val; + private List adc_val; + private List status_val; +} \ No newline at end of file diff --git a/src/main/java/com/casic/model/DataReportParam.java b/src/main/java/com/casic/model/DataReportParam.java index 082814c..754f330 100644 --- a/src/main/java/com/casic/model/DataReportParam.java +++ b/src/main/java/com/casic/model/DataReportParam.java @@ -11,25 +11,12 @@ */ @Data public class DataReportParam { - private String upPacketSN; - private String upDataSN; - private String topic; - private String timestamp; - private String tenantId; - private String serviceId; - private String protocol; - private String productId; - /** - * gas_sensor_state = 1, --事件类型 0 正常 1 低报 2 高报 - * gas_sample_value = 11-- 浓度值 - */ - private Map payload; - private String messageType; private String deviceType; - private String deviceId; - private String assocAssetId; - @JsonProperty(value = "IMSI", required = true) - private String IMSI; - @JsonProperty(value = "IMEI", required = true) - private String IMEI; + private String iotId; + private String requestId; + private Object checkFailedData; + private String productKey; + private String gmtCreate; + private String deviceName; + private Object items; } diff --git a/src/main/java/com/casic/service/DeviceDataService.java b/src/main/java/com/casic/service/DeviceDataService.java index d883fe4..457d710 100644 --- a/src/main/java/com/casic/service/DeviceDataService.java +++ b/src/main/java/com/casic/service/DeviceDataService.java @@ -3,25 +3,18 @@ import com.casic.model.DataReportParam; import com.casic.model.HeartbeatParam; import com.casic.model.ResponseData; +import org.springframework.web.bind.annotation.RequestBody; /** * @author cz * @date 2022 */ public interface DeviceDataService { - /** * * @param dataReportParam * @return */ - ResponseData DeviceDataCommit(DataReportParam dataReportParam); - - /** - * - * @param heartbeatParam - * @return - */ - ResponseData heartBeatSave(HeartbeatParam heartbeatParam); + ResponseData gasReceiver(DataReportParam dataReportParam); } diff --git a/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java index 93f0685..bb018df 100644 --- a/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java +++ b/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java @@ -1,58 +1,49 @@ package com.casic.service.impl; -import com.casic.dao.impl.DeviceDataMapper; +import com.alibaba.druid.util.StringUtils; +import com.alibaba.fastjson.JSON; import com.casic.model.*; import com.casic.service.DeviceDataService; +import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; +import java.util.Map; + /** * @author cz - * @date 2022-6-20 + * @date 2022-9-26 */ @Slf4j @Service public class DeviceDataServiceImpl implements DeviceDataService { - @Autowired - DeviceDataMapper deviceDataMapper; + private final NormalDataProcessor normalDataProcessor; - /** - * @param dataReportParam - * @return - */ - public ResponseData DeviceDataCommit(DataReportParam dataReportParam) { - ResponseData responseData = new ResponseData(); - try { - deviceDataMapper.addDeviceData(dataReportParam); - responseData.setCode(ResponseData.DEFAULT_SUCCESS_CODE); - responseData.setMessage(ResponseData.DEFAULT_SUCCESS_MESSAGE); - } catch (DataAccessException sqlex) { - responseData.setCode(ResponseData.DEFAULT_ERROR_CODE); - responseData.setMessage("请求数据异常"); - responseData.setSuccess(true); - log.error("主题:数据上报保存出现错误,异常信息为{}", sqlex); - } - return responseData; + public DeviceDataServiceImpl(NormalDataProcessor normalDataProcessor) { + this.normalDataProcessor = normalDataProcessor; } - /** - * @param heartbeatParam - * @return - */ - public ResponseData heartBeatSave(HeartbeatParam heartbeatParam) { + public ResponseData gasReceiver(DataReportParam dataReportParam) { ResponseData responseData = new ResponseData(); try { - deviceDataMapper.editDeviceData(heartbeatParam); + Map> updDataMap = new ObjectMapper().convertValue(dataReportParam.getItems(), Map.class); + DataContentParam dataContentParam = JSON.parseObject(updDataMap.get("upd_data").get("value"), DataContentParam.class); + Long uptime = Long.valueOf(String.valueOf(updDataMap.get("upd_data").get("time"))); + if (StringUtils.isEmpty(dataReportParam.getDeviceName())) { + responseData.setCode(200); + responseData.setMessage("没有设备编号"); + return responseData; + } + normalDataProcessor.normalDataProvider(dataContentParam, uptime, dataReportParam.getDeviceName()); responseData.setCode(ResponseData.DEFAULT_SUCCESS_CODE); responseData.setMessage(ResponseData.DEFAULT_SUCCESS_MESSAGE); } catch (DataAccessException sqlex) { responseData.setCode(ResponseData.DEFAULT_ERROR_CODE); responseData.setMessage("请求数据异常"); responseData.setSuccess(true); - log.error("主题:数据心跳出现错误,异常信息为{}", sqlex); + log.error("主题:设备数据上报出现错误,异常信息为{}", sqlex); } return responseData; } diff --git a/src/main/java/com/casic/service/impl/NormalDataProcessor.java b/src/main/java/com/casic/service/impl/NormalDataProcessor.java new file mode 100644 index 0000000..5375b2e --- /dev/null +++ b/src/main/java/com/casic/service/impl/NormalDataProcessor.java @@ -0,0 +1,142 @@ +package com.casic.service.impl; + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.AlarmRecordsMapper; +import com.casic.dao.DataGasMapper; +import com.casic.dao.impl.AlarmJobDao; +import com.casic.entity.AlarmJob; +import com.casic.entity.AlarmRecords; +import com.casic.entity.DataGasDector; +import com.casic.model.DataContentParam; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.springframework.util.ObjectUtils; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.Map; + +@Slf4j +@Component +public class NormalDataProcessor { + + public static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyyMMdd"); + + @Value("${casic.device.gas-dector.type}") + private String deviceType; + @Value("${casic.device.gas-dector.minutes}") + private String minutes; + + @Resource + private DataGasMapper dataGasMapper; + @Autowired + private AlarmJobDao alarmJobDao; + @Resource + private AlarmRecordsMapper alarmRecordsMapper; + + public void normalDataProvider(DataContentParam dataReportParam, Long timeStamp, String devcode) { + Map gasMap = dataGasMapper.getWellCode(devcode); + if (ObjectUtils.isEmpty(gasMap)) { + log.info("没有该设备编号录入" + devcode); + } + if (ObjectUtils.isEmpty(dataGasMapper.getLastData(minutes, devcode))) { + this.saveNormalData(dataReportParam, timeStamp, devcode, gasMap); + } + this.dataTaskJudge(dataReportParam, devcode, timeStamp, gasMap); + return; + } + + /** + * 自定义时间存库 + * @param dataReportParam + * @param timeStamp + * @param devcode + * @param gasMap + */ + private void saveNormalData(DataContentParam dataReportParam, Long timeStamp, String devcode, Map gasMap) { + DataGasDector dataGasDector = new DataGasDector(); + dataGasDector.setDevcode(devcode); + dataGasDector.setWellCode(!ObjectUtils.isEmpty(gasMap) && gasMap.containsKey("wellCode") ? gasMap.get("wellCode") : ""); + dataGasDector.setLogtime(new Date()); + dataGasDector.setUptime(new Date(timeStamp)); + dataGasDector.setDescn(dataReportParam.getMsg_type()); + dataReportParam.getRtd_val().stream().filter( + data -> { + return data != -1; + } + ).forEach( + data -> { + if (data == 65535) { + dataGasMapper.setOfflineByDevcode(devcode); + } else { + dataGasDector.setStrength(String.valueOf(data)); + dataGasMapper.insert(dataGasDector); + } + } + ); + } + + /** + * 报警就存库 + * @param dataReportParam + * @param devcode + * @param timeStamp + * @param gasMap + */ + private void dataTaskJudge(DataContentParam dataReportParam, String devcode, Long timeStamp, Map gasMap) { + List> alarmLevelList = dataGasMapper.getAlarmLevelList(deviceType); + String wellCode = !ObjectUtils.isEmpty(gasMap) && gasMap.containsKey("wellCode") ? gasMap.get("wellCode") : ""; + Long deviceId = Long.valueOf(gasMap.get("deviceId")); + dataReportParam.getRtd_val().stream().filter( + dataReport -> { + return dataReport != -1 && dataReport != 65535; + } + ).forEach( + dataReport -> { + for (Map alarmLevelMap : alarmLevelList) { + if (dataReport > Integer.valueOf(gasMap.get("high_value"))) { + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(deviceId); + alarmRecord.setDevcode(devcode); + alarmRecord.setWellCode(wellCode); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("燃气报警"); + alarmRecord.setAlarmValue(String.valueOf(dataReport)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmLevel(Integer.valueOf(alarmLevelMap.get("level").toString())); + alarmRecord.setAlarmMessage("燃气报警"); + String jobId = alarmRecordsMapper.isOldAlarmRecord(devcode, "燃气报警"); + // 超出报警阈值 生成一条报警消息 + if (!StringUtils.isEmpty(jobId)) { + alarmRecordsMapper.updateOldAlarmRecord(devcode, "燃气报警"); + alarmRecord.setAlarmMessage(jobId); + } else { + AlarmJob alarmJob = alarmJobDao.saveData(devcode, wellCode, "RQZD", "1"); + alarmRecord.setJobId(alarmJob.getId()); + } + alarmNormalData(dataReportParam, timeStamp, devcode, gasMap, dataReport); + alarmRecordsMapper.insert(alarmRecord); + } + } + } + ); + } + + private void alarmNormalData(DataContentParam dataReportParam, Long timeStamp, String devcode, Map gasMap, Integer data) { + DataGasDector dataGasDector = new DataGasDector(); + dataGasDector.setDevcode(devcode); + dataGasDector.setWellCode(!ObjectUtils.isEmpty(gasMap) && gasMap.containsKey("wellCode") ? gasMap.get("wellCode"):""); + dataGasDector.setLogtime(new Date()); + dataGasDector.setUptime(new Date(timeStamp)); + dataGasDector.setDescn(dataReportParam.getMsg_type()); + dataGasDector.setStrength(String.valueOf(data)); + dataGasMapper.insert(dataGasDector); + } +} + diff --git a/src/main/java/com/casic/controller/DeviceDataController.java b/src/main/java/com/casic/controller/DeviceDataController.java index e5351c9..971b258 100644 --- a/src/main/java/com/casic/controller/DeviceDataController.java +++ b/src/main/java/com/casic/controller/DeviceDataController.java @@ -1,7 +1,6 @@ package com.casic.controller; import com.casic.model.DataReportParam; -import com.casic.model.HeartbeatParam; import com.casic.model.ResponseData; import com.casic.service.DeviceDataService; import org.springframework.web.bind.annotation.PostMapping; @@ -19,19 +18,9 @@ this.dataService = dataService; } - @PostMapping("/commit") - public ResponseData DeviceDataCommit(@RequestBody DataReportParam dataReportParam) { - return dataService.DeviceDataCommit(dataReportParam); - } - - @PostMapping("/heartbeat") - public ResponseData heartBeat(@RequestBody HeartbeatParam heartbeatParam) { - return dataService.heartBeatSave(heartbeatParam); - } - @PostMapping("/gas/receiver") - public ResponseData gasReceiver(@RequestBody HeartbeatParam heartbeatParam) { - return dataService.heartBeatSave(heartbeatParam); + public ResponseData gasReceiver(@RequestBody DataReportParam dataReportParam) { + return dataService.gasReceiver(dataReportParam); } } diff --git a/src/main/java/com/casic/dao/AlarmJobMapper.java b/src/main/java/com/casic/dao/AlarmJobMapper.java new file mode 100644 index 0000000..e5e9c8d --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmJobMapper.java @@ -0,0 +1,17 @@ +package com.casic.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.AlarmJob; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +@Mapper +public interface AlarmJobMapper extends BaseMapper { + + @Select("SELECT MAX(jobcode) " + + "FROM alarm_job " + + "WHERE JOBCODE like '${jobcode}%'") + String getJobCodeMaxSerial(@Param("jobcode") String jobcode); + +} diff --git a/src/main/java/com/casic/dao/AlarmRecordsMapper.java b/src/main/java/com/casic/dao/AlarmRecordsMapper.java new file mode 100644 index 0000000..8da7dcb --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -0,0 +1,28 @@ +package com.casic.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.AlarmRecords; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +@Mapper +public interface AlarmRecordsMapper extends BaseMapper { + + + @Select("SELECT JOB_ID AS \"jobId\"\n " + + "FROM alarm_records\n " + + "WHERE DEVCODE = #{devcode}\n " + + "AND ALARM_CONTENT = #{MsgContent}\n " + + "AND STATUS='1'\n " + + "AND JOB_ID>0 ") + String isOldAlarmRecord(@Param("devcode") String devcode, @Param("MsgContent") String MsgContent); + + @Update(" UPDATE alarm_records\n" + + " SET STATUS='0'\n" + + " WHERE DEVCODE = #{devcode}\n" + + " AND ALARM_CONTENT = #{MsgContent}\n" + + " AND STATUS='1'") + Integer updateOldAlarmRecord(@Param("devcode") String devcode, @Param("MsgContent") String MsgContent); +} diff --git a/src/main/java/com/casic/dao/DataGasMapper.java b/src/main/java/com/casic/dao/DataGasMapper.java index 47e7cce..6e08811 100644 --- a/src/main/java/com/casic/dao/DataGasMapper.java +++ b/src/main/java/com/casic/dao/DataGasMapper.java @@ -1,9 +1,41 @@ package com.casic.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.casic.entity.DataGasReport; +import com.casic.entity.DataGasDector; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +import java.util.List; +import java.util.Map; @Mapper -public interface DataGasMapper extends BaseMapper { +public interface DataGasMapper extends BaseMapper { + + @Select("select bd.id as \"deviceId\" " + + "from bus_device_well bdw " + + "join (select id from bus_device where devcode=#{devcode}) bd ON bd.id=bdw.device_id " + + "join bus_well_info bwi ON bwi.id=bdw.well_id ") + Map getWellCode(@Param("devcode") String devcode); + + @Update("UPDATE bus_device" + + "SET ONLINE_STATE=0" + + "WHERE devcode=#{devcode} ") + void setOfflineByDevcode(@Param("devcode") String devcode); + + @Select("SELECT level,high_value " + + "FROM alarm_level " + + "WHERE device_type=#{deviceType} ") + List> getAlarmLevelList(@Param("deviceType") String deviceType); + + @Select("SELECT devcode " + + "FROM data_gas_dector " + + "WHERE devcode=#{devcode} " + + "AND date_part('minute',now()-uptime) < ${minutes}" + + "ORDER BY uptime DESC " + + "LIMIT 1") + String getLastData(@Param("minutes") String minutes, + @Param("devcode") String devcode); + } diff --git a/src/main/java/com/casic/dao/impl/AlarmJobDao.java b/src/main/java/com/casic/dao/impl/AlarmJobDao.java new file mode 100644 index 0000000..3a2a424 --- /dev/null +++ b/src/main/java/com/casic/dao/impl/AlarmJobDao.java @@ -0,0 +1,54 @@ +package com.casic.dao.impl; + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.AlarmJobMapper; +import com.casic.entity.AlarmJob; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Component +public class AlarmJobDao { + + public static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyyMMdd"); + + @Resource + private AlarmJobMapper alarmJobMapper; + + public AlarmJob saveData(String devCode, String wellCode, String devTypeName, String jobType) { + AlarmJob alarmJob = new AlarmJob(); + alarmJob.setDevcode(devCode); + alarmJob.setWellCode(wellCode); + alarmJob.setJobStatus("0"); + alarmJob.setCreateTime(new Date()); + alarmJob.setJobcode(this.produceJobCode(devTypeName)); + alarmJob.setJobType(jobType); + alarmJobMapper.insert(alarmJob); + return alarmJob; + } + + /** + * 前缀+日期+4位流水号 + * + * @param devTypeName + * @return + */ + private String produceJobCode(String devTypeName) { + String pre = devTypeName; + String dataStr = sdf6.format(new Date()); + String fix = this.getJobCodeMaxSerial(pre + dataStr); + return StringUtils.isEmpty(fix) ? pre + dataStr + String.format("%04d", Long.valueOf(fix) + 1L) : pre + dataStr + "0001"; + } + + + private String getJobCodeMaxSerial(String jobcode) { + String MaxSerialJobCode = alarmJobMapper.getJobCodeMaxSerial(jobcode); + String fix = ""; + if (null != MaxSerialJobCode && MaxSerialJobCode.length() > 4) { + fix = MaxSerialJobCode.substring(MaxSerialJobCode.length() - 4); + } + return fix; + } +} diff --git a/src/main/java/com/casic/dao/impl/DeviceDataMapper.java b/src/main/java/com/casic/dao/impl/DeviceDataMapper.java deleted file mode 100644 index c797e55..0000000 --- a/src/main/java/com/casic/dao/impl/DeviceDataMapper.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.casic.dao.impl; - -import com.alibaba.fastjson.JSON; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; -import com.casic.dao.DataGasMapper; -import com.casic.entity.DataGasReport; -import com.casic.model.DataReportParam; -import com.casic.model.HeartbeatParam; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import javax.management.Query; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.time.DateTimeException; -import java.util.*; - -@Slf4j -@Component -public class DeviceDataMapper { - @Autowired - DataGasMapper dataGasMapper; - - public int addDeviceData(DataReportParam dataReportParam) { - DataGasReport dataGasReport = new DataGasReport(); - dataGasReport.setImei(dataReportParam.getIMEI()); - dataGasReport.setImsi(dataReportParam.getIMSI()); - try { - dataGasReport.setUptime(new Date(Long.valueOf(dataReportParam.getTimestamp()))); - } catch (DateTimeException dex) { - log.error("主题,日期转换出错,时间戳为{},异常信息为{}", dataReportParam.getTimestamp(), dex); - } - dataGasReport.setGasSampleValue(dataReportParam.getPayload().get("gas_sensor_state").toString()); - dataGasReport.setGasSensorState(dataReportParam.getPayload().get("gas_sample_value").toString()); - dataGasReport.setLogtime(new Date()); - return dataGasMapper.insert(dataGasReport); - } - - public int editDeviceData(HeartbeatParam heartbeatParam) { - DataGasReport dataGasReport = new DataGasReport(); - dataGasReport.setImei(heartbeatParam.getIMEI()); - dataGasReport.setImsi(heartbeatParam.getIMSI()); - //电池电压-电池点亮 - dataGasReport.setBatteryVoltage(heartbeatParam.getBattery_voltage()); - dataGasReport.setBatteryValue(heartbeatParam.getBattery_value()); - // - dataGasReport.setCellId(heartbeatParam.getCell_id()); - dataGasReport.setIccid(heartbeatParam.getICCID()); - //噪音、接收功率、小区标识 - dataGasReport.setPci(heartbeatParam.getPci()); - dataGasReport.setRsrp(heartbeatParam.getRsrp()); - dataGasReport.setSinr(heartbeatParam.getSinr()); - dataGasReport.setHeartbeatTime(heartbeatParam.getHeartbeat_time()); - QueryWrapper queryWrapper = new QueryWrapper() - .eq("DEVCODE", heartbeatParam.getIMEI()) - .orderByDesc("LOGTIME").last("limit 1"); - List dataGasReportList = dataGasMapper.selectList(queryWrapper); - if (dataGasReportList.size() == 0) { - return 0; - } else { - dataGasReport.setId(dataGasReportList.get(0).getId()); - } - return dataGasMapper.updateById(dataGasReport); - } - -} diff --git a/src/main/java/com/casic/entity/AlarmJob.java b/src/main/java/com/casic/entity/AlarmJob.java new file mode 100644 index 0000000..65a6096 --- /dev/null +++ b/src/main/java/com/casic/entity/AlarmJob.java @@ -0,0 +1,165 @@ +package com.casic.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 报警工单表 + *

+ * + * @author casic123 + * @since 2019-05-17 + */ +@Data +@TableName("alarm_job") +public class AlarmJob extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.AUTO) + private Long id; + /** + * 工单编号 + */ + @TableField("JOBCODE") + private String jobcode; + /** + * 工单类型 + */ + @TableField("JOG_TYPE") + private String jobType; + /** + * 井编号 + */ + @TableField("WELL_CODE") + private String wellCode; + /** + * 设备编号 + */ + @TableField("DEVCODE") + private String devcode; + /** + * 工单创建时间 + */ + @TableField("CREATE_TIME") + private Date createTime; + /** + * 工单状态(0待处理,1待确认,2处理中,3完成) + */ + @TableField("JOB_STATUS") + private String jobStatus; + /** + * 接单人员 + */ + @TableField("GET_JOB_PERSON") + private Long getJobPerson; + /** + * 接单时间 + */ + @TableField("GET_JOB_TIME") + private Date getJobTime; + /** + * 应接单时间 + */ + @TableField("SHOULD_GET_TIME") + private Date shouldGetTime; + /** + * 第一现场情况 + */ + @TableField("FIRST_STATE") + private String firstState; + /** + * 第一现场照片 + */ + @TableField("FIRST_STATE_PHOTOS") + private String firstStatePhotos; + /** + * 确认人员 + */ + @TableField("CONFIRM_JOB_PERSON") + private Long confirmJobPerson; + /** + * 确认时间 + */ + @TableField("CONFRIM_JOB_TIME") + private Date confrimJobTime; + /** + * 处理人员 + */ + @TableField("HANDLE_JOB_Person") + private Long handleJobPerson; + /** + * 处理时间 + */ + @TableField("HANDLE_JOB_TIME") + private Date handleJobTime; + /** + * 维护情况记录 + */ + @TableField("HANDLE_MESSAGE") + private String handleMessage; + /** + * 维护图片 + */ + @TableField("HANDLE_PHOTOS") + private String handlePhotos; + /** + * 工单流转记录 + */ + @TableField("FLOW") + private String flow; + + @TableField("JOB_BELONG_TO") + private Long jobBelongTo; + + @TableField("JOB_FLAG_DELAY") + private String jobFlagDelay; + + @TableField("JOB_FLAG_1") + private String jobFlag1; + + @TableField(exist = false) + private String alarmValue; + + @TableField(exist = false) + private String alarmContentName; + + @TableField(exist = false) + private Integer recordId; + + @Override + public String toString() { + return "AlarmJob{" + + "id=" + id + + ", jobcode=" + jobcode + + ", jogType=" + jobType + + ", wellCode=" + wellCode + + ", devcode=" + devcode + + ", createTime=" + createTime + + ", jobStatus=" + jobStatus + + ", getJobPerson=" + getJobPerson + + ", getJobTime=" + getJobTime + + ", firstState=" + firstState + + ", firstStatePhotos=" + firstStatePhotos + + ", confirmJobPerson=" + confirmJobPerson + + ", confrimJobTime=" + confrimJobTime + + ", handleJobPerson=" + handleJobPerson + + ", handleJobTime=" + handleJobTime + + ", handleMessage=" + handleMessage + + ", handlePhotos=" + handlePhotos + + ", flow=" + flow + + ", recordId=" + recordId + + "}"; + } +} diff --git a/src/main/java/com/casic/entity/AlarmRecords.java b/src/main/java/com/casic/entity/AlarmRecords.java new file mode 100644 index 0000000..3bc2cab --- /dev/null +++ b/src/main/java/com/casic/entity/AlarmRecords.java @@ -0,0 +1,108 @@ +package com.casic.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +import java.util.Date; + +/** + *

+ * + *

+ * + * @author casic123 + * @since 2019-05-17 + */ +@Data +@TableName("alarm_records") +public class AlarmRecords extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.AUTO) + private Long id; + /** + * 设备ID + */ + @TableField("DEVICE_ID") + private Long deviceId; + /** + * 设备编号 + */ + @TableField("DEVCODE") + private String devcode; + /** + * 闸井编号 + */ + @TableField("WELL_CODE") + private String wellCode; + /** + * 告警类型 + */ + @TableField("ALARM_TYPE") + private String alarmType; + /** + * 告警内容 + */ + @TableField("ALARM_CONTENT") + private String alarmContent; + /** + * 告警数值 + */ + @TableField("ALARM_VALUE") + private String alarmValue; + /** + * 告警等级 + */ + @TableField("ALARM_LEVEL") + private Integer alarmLevel; + /** + * 告警详情 + */ + @TableField("ALARM_MSG") + private String alarmMessage; + /** + * 告警时间 + */ + @TableField("ALARM_TIME") + private Date alarmTime; + /** + * 告警状态 + */ + @TableField("STATUS") + private String status; + /** + * 工单编号 + */ + @TableField("JOB_ID") + private Long jobId; + + @TableField(exist = false) + private Integer jobStatus; + + @Override + public String toString() { + return "AlarmRecords{" + + "id=" + id + + ", deviceId=" + deviceId + + ", devcode=" + devcode + + ", wellCode=" + wellCode + + ", alarmType=" + alarmType + + ", alarmContent=" + alarmContent + + ", alarmValue=" + alarmValue + + ", alarmLevel=" + alarmLevel + + ", alarmMessage=" + alarmMessage + + ", alarmTime=" + alarmTime + + ", status=" + status + + ", jobId=" + jobId + + ", jobStatus=" + jobStatus + + "}"; + } +} diff --git a/src/main/java/com/casic/entity/DataGasDector.java b/src/main/java/com/casic/entity/DataGasDector.java new file mode 100644 index 0000000..537789a --- /dev/null +++ b/src/main/java/com/casic/entity/DataGasDector.java @@ -0,0 +1,42 @@ +package com.casic.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.util.Date; + +/** + * @author cz + * @date 2022-7-1 + */ +@Data +@TableName("data_gas_dector") +public class DataGasDector { + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + private String devcode; + private String wellCode; + private String strength; + + private String descn; + /** + * --信号与干扰加噪声比 + */ + private String sinr; + /** + * --参考信号接收功率 + */ + private String rsrp; + /** + * --物理小区标识  + */ + private String pci; + private Date uptime; + private Date logtime; +} diff --git a/src/main/java/com/casic/entity/DataGasReport.java b/src/main/java/com/casic/entity/DataGasReport.java deleted file mode 100644 index c43ccdf..0000000 --- a/src/main/java/com/casic/entity/DataGasReport.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.casic.entity; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; - -import java.util.Date; - -/** - * @author cz - * @date 2022-7-1 - */ -@Data -@TableName("data_gas_dector") -public class DataGasReport { - /** - * 主键 - */ - @TableId(value = "id", type = IdType.AUTO) - private Integer id; - - @TableField("devcode") - private String imei; - private String wellcode; - - private String imsi; - /** - * --事件类型 0正常 1低报 2高报 - */ - private String gasSensorState; - /** - * --浓度值 - */ - private String gasSampleValue; - /** - * --信号与干扰加噪声比 - */ - private String sinr; - /** - * --参考信号接收功率 - */ - private String rsrp; - /** - * --物理小区标识  - */ - private String pci; - /** - * --心跳周期 - */ - private String heartbeatTime; - - /** - * --小区位置信息 - */ - private String cellId; - /** - * --电池电压 - */ - private String batteryVoltage; - /** - * --电池电量 - */ - private String batteryValue; - private String iccid; - private Date uptime; - private Date logtime; -} diff --git a/src/main/java/com/casic/model/DataContentParam.java b/src/main/java/com/casic/model/DataContentParam.java new file mode 100644 index 0000000..46d298a --- /dev/null +++ b/src/main/java/com/casic/model/DataContentParam.java @@ -0,0 +1,19 @@ +package com.casic.model; + +import lombok.Data; + +import java.util.List; + +@Data +public class DataContentParam { + private String msg_type; + private String error_val; + private String ch_cnt; + private String erro_cnt; + private String alarm_low_cnt; + private String alarm_high_cnt; + private String offline_cnt; + private List rtd_val; + private List adc_val; + private List status_val; +} \ No newline at end of file diff --git a/src/main/java/com/casic/model/DataReportParam.java b/src/main/java/com/casic/model/DataReportParam.java index 082814c..754f330 100644 --- a/src/main/java/com/casic/model/DataReportParam.java +++ b/src/main/java/com/casic/model/DataReportParam.java @@ -11,25 +11,12 @@ */ @Data public class DataReportParam { - private String upPacketSN; - private String upDataSN; - private String topic; - private String timestamp; - private String tenantId; - private String serviceId; - private String protocol; - private String productId; - /** - * gas_sensor_state = 1, --事件类型 0 正常 1 低报 2 高报 - * gas_sample_value = 11-- 浓度值 - */ - private Map payload; - private String messageType; private String deviceType; - private String deviceId; - private String assocAssetId; - @JsonProperty(value = "IMSI", required = true) - private String IMSI; - @JsonProperty(value = "IMEI", required = true) - private String IMEI; + private String iotId; + private String requestId; + private Object checkFailedData; + private String productKey; + private String gmtCreate; + private String deviceName; + private Object items; } diff --git a/src/main/java/com/casic/service/DeviceDataService.java b/src/main/java/com/casic/service/DeviceDataService.java index d883fe4..457d710 100644 --- a/src/main/java/com/casic/service/DeviceDataService.java +++ b/src/main/java/com/casic/service/DeviceDataService.java @@ -3,25 +3,18 @@ import com.casic.model.DataReportParam; import com.casic.model.HeartbeatParam; import com.casic.model.ResponseData; +import org.springframework.web.bind.annotation.RequestBody; /** * @author cz * @date 2022 */ public interface DeviceDataService { - /** * * @param dataReportParam * @return */ - ResponseData DeviceDataCommit(DataReportParam dataReportParam); - - /** - * - * @param heartbeatParam - * @return - */ - ResponseData heartBeatSave(HeartbeatParam heartbeatParam); + ResponseData gasReceiver(DataReportParam dataReportParam); } diff --git a/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java index 93f0685..bb018df 100644 --- a/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java +++ b/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java @@ -1,58 +1,49 @@ package com.casic.service.impl; -import com.casic.dao.impl.DeviceDataMapper; +import com.alibaba.druid.util.StringUtils; +import com.alibaba.fastjson.JSON; import com.casic.model.*; import com.casic.service.DeviceDataService; +import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; +import java.util.Map; + /** * @author cz - * @date 2022-6-20 + * @date 2022-9-26 */ @Slf4j @Service public class DeviceDataServiceImpl implements DeviceDataService { - @Autowired - DeviceDataMapper deviceDataMapper; + private final NormalDataProcessor normalDataProcessor; - /** - * @param dataReportParam - * @return - */ - public ResponseData DeviceDataCommit(DataReportParam dataReportParam) { - ResponseData responseData = new ResponseData(); - try { - deviceDataMapper.addDeviceData(dataReportParam); - responseData.setCode(ResponseData.DEFAULT_SUCCESS_CODE); - responseData.setMessage(ResponseData.DEFAULT_SUCCESS_MESSAGE); - } catch (DataAccessException sqlex) { - responseData.setCode(ResponseData.DEFAULT_ERROR_CODE); - responseData.setMessage("请求数据异常"); - responseData.setSuccess(true); - log.error("主题:数据上报保存出现错误,异常信息为{}", sqlex); - } - return responseData; + public DeviceDataServiceImpl(NormalDataProcessor normalDataProcessor) { + this.normalDataProcessor = normalDataProcessor; } - /** - * @param heartbeatParam - * @return - */ - public ResponseData heartBeatSave(HeartbeatParam heartbeatParam) { + public ResponseData gasReceiver(DataReportParam dataReportParam) { ResponseData responseData = new ResponseData(); try { - deviceDataMapper.editDeviceData(heartbeatParam); + Map> updDataMap = new ObjectMapper().convertValue(dataReportParam.getItems(), Map.class); + DataContentParam dataContentParam = JSON.parseObject(updDataMap.get("upd_data").get("value"), DataContentParam.class); + Long uptime = Long.valueOf(String.valueOf(updDataMap.get("upd_data").get("time"))); + if (StringUtils.isEmpty(dataReportParam.getDeviceName())) { + responseData.setCode(200); + responseData.setMessage("没有设备编号"); + return responseData; + } + normalDataProcessor.normalDataProvider(dataContentParam, uptime, dataReportParam.getDeviceName()); responseData.setCode(ResponseData.DEFAULT_SUCCESS_CODE); responseData.setMessage(ResponseData.DEFAULT_SUCCESS_MESSAGE); } catch (DataAccessException sqlex) { responseData.setCode(ResponseData.DEFAULT_ERROR_CODE); responseData.setMessage("请求数据异常"); responseData.setSuccess(true); - log.error("主题:数据心跳出现错误,异常信息为{}", sqlex); + log.error("主题:设备数据上报出现错误,异常信息为{}", sqlex); } return responseData; } diff --git a/src/main/java/com/casic/service/impl/NormalDataProcessor.java b/src/main/java/com/casic/service/impl/NormalDataProcessor.java new file mode 100644 index 0000000..5375b2e --- /dev/null +++ b/src/main/java/com/casic/service/impl/NormalDataProcessor.java @@ -0,0 +1,142 @@ +package com.casic.service.impl; + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.AlarmRecordsMapper; +import com.casic.dao.DataGasMapper; +import com.casic.dao.impl.AlarmJobDao; +import com.casic.entity.AlarmJob; +import com.casic.entity.AlarmRecords; +import com.casic.entity.DataGasDector; +import com.casic.model.DataContentParam; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.springframework.util.ObjectUtils; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.Map; + +@Slf4j +@Component +public class NormalDataProcessor { + + public static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyyMMdd"); + + @Value("${casic.device.gas-dector.type}") + private String deviceType; + @Value("${casic.device.gas-dector.minutes}") + private String minutes; + + @Resource + private DataGasMapper dataGasMapper; + @Autowired + private AlarmJobDao alarmJobDao; + @Resource + private AlarmRecordsMapper alarmRecordsMapper; + + public void normalDataProvider(DataContentParam dataReportParam, Long timeStamp, String devcode) { + Map gasMap = dataGasMapper.getWellCode(devcode); + if (ObjectUtils.isEmpty(gasMap)) { + log.info("没有该设备编号录入" + devcode); + } + if (ObjectUtils.isEmpty(dataGasMapper.getLastData(minutes, devcode))) { + this.saveNormalData(dataReportParam, timeStamp, devcode, gasMap); + } + this.dataTaskJudge(dataReportParam, devcode, timeStamp, gasMap); + return; + } + + /** + * 自定义时间存库 + * @param dataReportParam + * @param timeStamp + * @param devcode + * @param gasMap + */ + private void saveNormalData(DataContentParam dataReportParam, Long timeStamp, String devcode, Map gasMap) { + DataGasDector dataGasDector = new DataGasDector(); + dataGasDector.setDevcode(devcode); + dataGasDector.setWellCode(!ObjectUtils.isEmpty(gasMap) && gasMap.containsKey("wellCode") ? gasMap.get("wellCode") : ""); + dataGasDector.setLogtime(new Date()); + dataGasDector.setUptime(new Date(timeStamp)); + dataGasDector.setDescn(dataReportParam.getMsg_type()); + dataReportParam.getRtd_val().stream().filter( + data -> { + return data != -1; + } + ).forEach( + data -> { + if (data == 65535) { + dataGasMapper.setOfflineByDevcode(devcode); + } else { + dataGasDector.setStrength(String.valueOf(data)); + dataGasMapper.insert(dataGasDector); + } + } + ); + } + + /** + * 报警就存库 + * @param dataReportParam + * @param devcode + * @param timeStamp + * @param gasMap + */ + private void dataTaskJudge(DataContentParam dataReportParam, String devcode, Long timeStamp, Map gasMap) { + List> alarmLevelList = dataGasMapper.getAlarmLevelList(deviceType); + String wellCode = !ObjectUtils.isEmpty(gasMap) && gasMap.containsKey("wellCode") ? gasMap.get("wellCode") : ""; + Long deviceId = Long.valueOf(gasMap.get("deviceId")); + dataReportParam.getRtd_val().stream().filter( + dataReport -> { + return dataReport != -1 && dataReport != 65535; + } + ).forEach( + dataReport -> { + for (Map alarmLevelMap : alarmLevelList) { + if (dataReport > Integer.valueOf(gasMap.get("high_value"))) { + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(deviceId); + alarmRecord.setDevcode(devcode); + alarmRecord.setWellCode(wellCode); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("燃气报警"); + alarmRecord.setAlarmValue(String.valueOf(dataReport)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmLevel(Integer.valueOf(alarmLevelMap.get("level").toString())); + alarmRecord.setAlarmMessage("燃气报警"); + String jobId = alarmRecordsMapper.isOldAlarmRecord(devcode, "燃气报警"); + // 超出报警阈值 生成一条报警消息 + if (!StringUtils.isEmpty(jobId)) { + alarmRecordsMapper.updateOldAlarmRecord(devcode, "燃气报警"); + alarmRecord.setAlarmMessage(jobId); + } else { + AlarmJob alarmJob = alarmJobDao.saveData(devcode, wellCode, "RQZD", "1"); + alarmRecord.setJobId(alarmJob.getId()); + } + alarmNormalData(dataReportParam, timeStamp, devcode, gasMap, dataReport); + alarmRecordsMapper.insert(alarmRecord); + } + } + } + ); + } + + private void alarmNormalData(DataContentParam dataReportParam, Long timeStamp, String devcode, Map gasMap, Integer data) { + DataGasDector dataGasDector = new DataGasDector(); + dataGasDector.setDevcode(devcode); + dataGasDector.setWellCode(!ObjectUtils.isEmpty(gasMap) && gasMap.containsKey("wellCode") ? gasMap.get("wellCode"):""); + dataGasDector.setLogtime(new Date()); + dataGasDector.setUptime(new Date(timeStamp)); + dataGasDector.setDescn(dataReportParam.getMsg_type()); + dataGasDector.setStrength(String.valueOf(data)); + dataGasMapper.insert(dataGasDector); + } +} + diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index fac2afe..d17a81a 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -3,35 +3,14 @@ ################### spring配置 ################### spring: datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/smartwell_zq?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&&useSSL=true - username: root + driver-class-name: org.postgresql.Driver + url: jdbc:postgresql://111.198.10.15:11209/smartwell_zq_cs + username: postgres password: Casic203 session: store-type: redis - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer jms: pub-sub-domain: true - # session: - # store-type: redis - activemq: - user: - password: - broker-url: tcp://192.168.0.203:61616 -#flowable数据源和多数据源配置 -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - #kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - db: - init: - enable: false - file-upload-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\upload - spring-session-open: false #开启spring session logging: level.root: error level.com.casic: error diff --git a/src/main/java/com/casic/controller/DeviceDataController.java b/src/main/java/com/casic/controller/DeviceDataController.java index e5351c9..971b258 100644 --- a/src/main/java/com/casic/controller/DeviceDataController.java +++ b/src/main/java/com/casic/controller/DeviceDataController.java @@ -1,7 +1,6 @@ package com.casic.controller; import com.casic.model.DataReportParam; -import com.casic.model.HeartbeatParam; import com.casic.model.ResponseData; import com.casic.service.DeviceDataService; import org.springframework.web.bind.annotation.PostMapping; @@ -19,19 +18,9 @@ this.dataService = dataService; } - @PostMapping("/commit") - public ResponseData DeviceDataCommit(@RequestBody DataReportParam dataReportParam) { - return dataService.DeviceDataCommit(dataReportParam); - } - - @PostMapping("/heartbeat") - public ResponseData heartBeat(@RequestBody HeartbeatParam heartbeatParam) { - return dataService.heartBeatSave(heartbeatParam); - } - @PostMapping("/gas/receiver") - public ResponseData gasReceiver(@RequestBody HeartbeatParam heartbeatParam) { - return dataService.heartBeatSave(heartbeatParam); + public ResponseData gasReceiver(@RequestBody DataReportParam dataReportParam) { + return dataService.gasReceiver(dataReportParam); } } diff --git a/src/main/java/com/casic/dao/AlarmJobMapper.java b/src/main/java/com/casic/dao/AlarmJobMapper.java new file mode 100644 index 0000000..e5e9c8d --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmJobMapper.java @@ -0,0 +1,17 @@ +package com.casic.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.AlarmJob; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +@Mapper +public interface AlarmJobMapper extends BaseMapper { + + @Select("SELECT MAX(jobcode) " + + "FROM alarm_job " + + "WHERE JOBCODE like '${jobcode}%'") + String getJobCodeMaxSerial(@Param("jobcode") String jobcode); + +} diff --git a/src/main/java/com/casic/dao/AlarmRecordsMapper.java b/src/main/java/com/casic/dao/AlarmRecordsMapper.java new file mode 100644 index 0000000..8da7dcb --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -0,0 +1,28 @@ +package com.casic.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.AlarmRecords; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +@Mapper +public interface AlarmRecordsMapper extends BaseMapper { + + + @Select("SELECT JOB_ID AS \"jobId\"\n " + + "FROM alarm_records\n " + + "WHERE DEVCODE = #{devcode}\n " + + "AND ALARM_CONTENT = #{MsgContent}\n " + + "AND STATUS='1'\n " + + "AND JOB_ID>0 ") + String isOldAlarmRecord(@Param("devcode") String devcode, @Param("MsgContent") String MsgContent); + + @Update(" UPDATE alarm_records\n" + + " SET STATUS='0'\n" + + " WHERE DEVCODE = #{devcode}\n" + + " AND ALARM_CONTENT = #{MsgContent}\n" + + " AND STATUS='1'") + Integer updateOldAlarmRecord(@Param("devcode") String devcode, @Param("MsgContent") String MsgContent); +} diff --git a/src/main/java/com/casic/dao/DataGasMapper.java b/src/main/java/com/casic/dao/DataGasMapper.java index 47e7cce..6e08811 100644 --- a/src/main/java/com/casic/dao/DataGasMapper.java +++ b/src/main/java/com/casic/dao/DataGasMapper.java @@ -1,9 +1,41 @@ package com.casic.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.casic.entity.DataGasReport; +import com.casic.entity.DataGasDector; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +import java.util.List; +import java.util.Map; @Mapper -public interface DataGasMapper extends BaseMapper { +public interface DataGasMapper extends BaseMapper { + + @Select("select bd.id as \"deviceId\" " + + "from bus_device_well bdw " + + "join (select id from bus_device where devcode=#{devcode}) bd ON bd.id=bdw.device_id " + + "join bus_well_info bwi ON bwi.id=bdw.well_id ") + Map getWellCode(@Param("devcode") String devcode); + + @Update("UPDATE bus_device" + + "SET ONLINE_STATE=0" + + "WHERE devcode=#{devcode} ") + void setOfflineByDevcode(@Param("devcode") String devcode); + + @Select("SELECT level,high_value " + + "FROM alarm_level " + + "WHERE device_type=#{deviceType} ") + List> getAlarmLevelList(@Param("deviceType") String deviceType); + + @Select("SELECT devcode " + + "FROM data_gas_dector " + + "WHERE devcode=#{devcode} " + + "AND date_part('minute',now()-uptime) < ${minutes}" + + "ORDER BY uptime DESC " + + "LIMIT 1") + String getLastData(@Param("minutes") String minutes, + @Param("devcode") String devcode); + } diff --git a/src/main/java/com/casic/dao/impl/AlarmJobDao.java b/src/main/java/com/casic/dao/impl/AlarmJobDao.java new file mode 100644 index 0000000..3a2a424 --- /dev/null +++ b/src/main/java/com/casic/dao/impl/AlarmJobDao.java @@ -0,0 +1,54 @@ +package com.casic.dao.impl; + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.AlarmJobMapper; +import com.casic.entity.AlarmJob; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Component +public class AlarmJobDao { + + public static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyyMMdd"); + + @Resource + private AlarmJobMapper alarmJobMapper; + + public AlarmJob saveData(String devCode, String wellCode, String devTypeName, String jobType) { + AlarmJob alarmJob = new AlarmJob(); + alarmJob.setDevcode(devCode); + alarmJob.setWellCode(wellCode); + alarmJob.setJobStatus("0"); + alarmJob.setCreateTime(new Date()); + alarmJob.setJobcode(this.produceJobCode(devTypeName)); + alarmJob.setJobType(jobType); + alarmJobMapper.insert(alarmJob); + return alarmJob; + } + + /** + * 前缀+日期+4位流水号 + * + * @param devTypeName + * @return + */ + private String produceJobCode(String devTypeName) { + String pre = devTypeName; + String dataStr = sdf6.format(new Date()); + String fix = this.getJobCodeMaxSerial(pre + dataStr); + return StringUtils.isEmpty(fix) ? pre + dataStr + String.format("%04d", Long.valueOf(fix) + 1L) : pre + dataStr + "0001"; + } + + + private String getJobCodeMaxSerial(String jobcode) { + String MaxSerialJobCode = alarmJobMapper.getJobCodeMaxSerial(jobcode); + String fix = ""; + if (null != MaxSerialJobCode && MaxSerialJobCode.length() > 4) { + fix = MaxSerialJobCode.substring(MaxSerialJobCode.length() - 4); + } + return fix; + } +} diff --git a/src/main/java/com/casic/dao/impl/DeviceDataMapper.java b/src/main/java/com/casic/dao/impl/DeviceDataMapper.java deleted file mode 100644 index c797e55..0000000 --- a/src/main/java/com/casic/dao/impl/DeviceDataMapper.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.casic.dao.impl; - -import com.alibaba.fastjson.JSON; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; -import com.casic.dao.DataGasMapper; -import com.casic.entity.DataGasReport; -import com.casic.model.DataReportParam; -import com.casic.model.HeartbeatParam; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import javax.management.Query; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.time.DateTimeException; -import java.util.*; - -@Slf4j -@Component -public class DeviceDataMapper { - @Autowired - DataGasMapper dataGasMapper; - - public int addDeviceData(DataReportParam dataReportParam) { - DataGasReport dataGasReport = new DataGasReport(); - dataGasReport.setImei(dataReportParam.getIMEI()); - dataGasReport.setImsi(dataReportParam.getIMSI()); - try { - dataGasReport.setUptime(new Date(Long.valueOf(dataReportParam.getTimestamp()))); - } catch (DateTimeException dex) { - log.error("主题,日期转换出错,时间戳为{},异常信息为{}", dataReportParam.getTimestamp(), dex); - } - dataGasReport.setGasSampleValue(dataReportParam.getPayload().get("gas_sensor_state").toString()); - dataGasReport.setGasSensorState(dataReportParam.getPayload().get("gas_sample_value").toString()); - dataGasReport.setLogtime(new Date()); - return dataGasMapper.insert(dataGasReport); - } - - public int editDeviceData(HeartbeatParam heartbeatParam) { - DataGasReport dataGasReport = new DataGasReport(); - dataGasReport.setImei(heartbeatParam.getIMEI()); - dataGasReport.setImsi(heartbeatParam.getIMSI()); - //电池电压-电池点亮 - dataGasReport.setBatteryVoltage(heartbeatParam.getBattery_voltage()); - dataGasReport.setBatteryValue(heartbeatParam.getBattery_value()); - // - dataGasReport.setCellId(heartbeatParam.getCell_id()); - dataGasReport.setIccid(heartbeatParam.getICCID()); - //噪音、接收功率、小区标识 - dataGasReport.setPci(heartbeatParam.getPci()); - dataGasReport.setRsrp(heartbeatParam.getRsrp()); - dataGasReport.setSinr(heartbeatParam.getSinr()); - dataGasReport.setHeartbeatTime(heartbeatParam.getHeartbeat_time()); - QueryWrapper queryWrapper = new QueryWrapper() - .eq("DEVCODE", heartbeatParam.getIMEI()) - .orderByDesc("LOGTIME").last("limit 1"); - List dataGasReportList = dataGasMapper.selectList(queryWrapper); - if (dataGasReportList.size() == 0) { - return 0; - } else { - dataGasReport.setId(dataGasReportList.get(0).getId()); - } - return dataGasMapper.updateById(dataGasReport); - } - -} diff --git a/src/main/java/com/casic/entity/AlarmJob.java b/src/main/java/com/casic/entity/AlarmJob.java new file mode 100644 index 0000000..65a6096 --- /dev/null +++ b/src/main/java/com/casic/entity/AlarmJob.java @@ -0,0 +1,165 @@ +package com.casic.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 报警工单表 + *

+ * + * @author casic123 + * @since 2019-05-17 + */ +@Data +@TableName("alarm_job") +public class AlarmJob extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.AUTO) + private Long id; + /** + * 工单编号 + */ + @TableField("JOBCODE") + private String jobcode; + /** + * 工单类型 + */ + @TableField("JOG_TYPE") + private String jobType; + /** + * 井编号 + */ + @TableField("WELL_CODE") + private String wellCode; + /** + * 设备编号 + */ + @TableField("DEVCODE") + private String devcode; + /** + * 工单创建时间 + */ + @TableField("CREATE_TIME") + private Date createTime; + /** + * 工单状态(0待处理,1待确认,2处理中,3完成) + */ + @TableField("JOB_STATUS") + private String jobStatus; + /** + * 接单人员 + */ + @TableField("GET_JOB_PERSON") + private Long getJobPerson; + /** + * 接单时间 + */ + @TableField("GET_JOB_TIME") + private Date getJobTime; + /** + * 应接单时间 + */ + @TableField("SHOULD_GET_TIME") + private Date shouldGetTime; + /** + * 第一现场情况 + */ + @TableField("FIRST_STATE") + private String firstState; + /** + * 第一现场照片 + */ + @TableField("FIRST_STATE_PHOTOS") + private String firstStatePhotos; + /** + * 确认人员 + */ + @TableField("CONFIRM_JOB_PERSON") + private Long confirmJobPerson; + /** + * 确认时间 + */ + @TableField("CONFRIM_JOB_TIME") + private Date confrimJobTime; + /** + * 处理人员 + */ + @TableField("HANDLE_JOB_Person") + private Long handleJobPerson; + /** + * 处理时间 + */ + @TableField("HANDLE_JOB_TIME") + private Date handleJobTime; + /** + * 维护情况记录 + */ + @TableField("HANDLE_MESSAGE") + private String handleMessage; + /** + * 维护图片 + */ + @TableField("HANDLE_PHOTOS") + private String handlePhotos; + /** + * 工单流转记录 + */ + @TableField("FLOW") + private String flow; + + @TableField("JOB_BELONG_TO") + private Long jobBelongTo; + + @TableField("JOB_FLAG_DELAY") + private String jobFlagDelay; + + @TableField("JOB_FLAG_1") + private String jobFlag1; + + @TableField(exist = false) + private String alarmValue; + + @TableField(exist = false) + private String alarmContentName; + + @TableField(exist = false) + private Integer recordId; + + @Override + public String toString() { + return "AlarmJob{" + + "id=" + id + + ", jobcode=" + jobcode + + ", jogType=" + jobType + + ", wellCode=" + wellCode + + ", devcode=" + devcode + + ", createTime=" + createTime + + ", jobStatus=" + jobStatus + + ", getJobPerson=" + getJobPerson + + ", getJobTime=" + getJobTime + + ", firstState=" + firstState + + ", firstStatePhotos=" + firstStatePhotos + + ", confirmJobPerson=" + confirmJobPerson + + ", confrimJobTime=" + confrimJobTime + + ", handleJobPerson=" + handleJobPerson + + ", handleJobTime=" + handleJobTime + + ", handleMessage=" + handleMessage + + ", handlePhotos=" + handlePhotos + + ", flow=" + flow + + ", recordId=" + recordId + + "}"; + } +} diff --git a/src/main/java/com/casic/entity/AlarmRecords.java b/src/main/java/com/casic/entity/AlarmRecords.java new file mode 100644 index 0000000..3bc2cab --- /dev/null +++ b/src/main/java/com/casic/entity/AlarmRecords.java @@ -0,0 +1,108 @@ +package com.casic.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +import java.util.Date; + +/** + *

+ * + *

+ * + * @author casic123 + * @since 2019-05-17 + */ +@Data +@TableName("alarm_records") +public class AlarmRecords extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.AUTO) + private Long id; + /** + * 设备ID + */ + @TableField("DEVICE_ID") + private Long deviceId; + /** + * 设备编号 + */ + @TableField("DEVCODE") + private String devcode; + /** + * 闸井编号 + */ + @TableField("WELL_CODE") + private String wellCode; + /** + * 告警类型 + */ + @TableField("ALARM_TYPE") + private String alarmType; + /** + * 告警内容 + */ + @TableField("ALARM_CONTENT") + private String alarmContent; + /** + * 告警数值 + */ + @TableField("ALARM_VALUE") + private String alarmValue; + /** + * 告警等级 + */ + @TableField("ALARM_LEVEL") + private Integer alarmLevel; + /** + * 告警详情 + */ + @TableField("ALARM_MSG") + private String alarmMessage; + /** + * 告警时间 + */ + @TableField("ALARM_TIME") + private Date alarmTime; + /** + * 告警状态 + */ + @TableField("STATUS") + private String status; + /** + * 工单编号 + */ + @TableField("JOB_ID") + private Long jobId; + + @TableField(exist = false) + private Integer jobStatus; + + @Override + public String toString() { + return "AlarmRecords{" + + "id=" + id + + ", deviceId=" + deviceId + + ", devcode=" + devcode + + ", wellCode=" + wellCode + + ", alarmType=" + alarmType + + ", alarmContent=" + alarmContent + + ", alarmValue=" + alarmValue + + ", alarmLevel=" + alarmLevel + + ", alarmMessage=" + alarmMessage + + ", alarmTime=" + alarmTime + + ", status=" + status + + ", jobId=" + jobId + + ", jobStatus=" + jobStatus + + "}"; + } +} diff --git a/src/main/java/com/casic/entity/DataGasDector.java b/src/main/java/com/casic/entity/DataGasDector.java new file mode 100644 index 0000000..537789a --- /dev/null +++ b/src/main/java/com/casic/entity/DataGasDector.java @@ -0,0 +1,42 @@ +package com.casic.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.util.Date; + +/** + * @author cz + * @date 2022-7-1 + */ +@Data +@TableName("data_gas_dector") +public class DataGasDector { + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + private String devcode; + private String wellCode; + private String strength; + + private String descn; + /** + * --信号与干扰加噪声比 + */ + private String sinr; + /** + * --参考信号接收功率 + */ + private String rsrp; + /** + * --物理小区标识  + */ + private String pci; + private Date uptime; + private Date logtime; +} diff --git a/src/main/java/com/casic/entity/DataGasReport.java b/src/main/java/com/casic/entity/DataGasReport.java deleted file mode 100644 index c43ccdf..0000000 --- a/src/main/java/com/casic/entity/DataGasReport.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.casic.entity; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; - -import java.util.Date; - -/** - * @author cz - * @date 2022-7-1 - */ -@Data -@TableName("data_gas_dector") -public class DataGasReport { - /** - * 主键 - */ - @TableId(value = "id", type = IdType.AUTO) - private Integer id; - - @TableField("devcode") - private String imei; - private String wellcode; - - private String imsi; - /** - * --事件类型 0正常 1低报 2高报 - */ - private String gasSensorState; - /** - * --浓度值 - */ - private String gasSampleValue; - /** - * --信号与干扰加噪声比 - */ - private String sinr; - /** - * --参考信号接收功率 - */ - private String rsrp; - /** - * --物理小区标识  - */ - private String pci; - /** - * --心跳周期 - */ - private String heartbeatTime; - - /** - * --小区位置信息 - */ - private String cellId; - /** - * --电池电压 - */ - private String batteryVoltage; - /** - * --电池电量 - */ - private String batteryValue; - private String iccid; - private Date uptime; - private Date logtime; -} diff --git a/src/main/java/com/casic/model/DataContentParam.java b/src/main/java/com/casic/model/DataContentParam.java new file mode 100644 index 0000000..46d298a --- /dev/null +++ b/src/main/java/com/casic/model/DataContentParam.java @@ -0,0 +1,19 @@ +package com.casic.model; + +import lombok.Data; + +import java.util.List; + +@Data +public class DataContentParam { + private String msg_type; + private String error_val; + private String ch_cnt; + private String erro_cnt; + private String alarm_low_cnt; + private String alarm_high_cnt; + private String offline_cnt; + private List rtd_val; + private List adc_val; + private List status_val; +} \ No newline at end of file diff --git a/src/main/java/com/casic/model/DataReportParam.java b/src/main/java/com/casic/model/DataReportParam.java index 082814c..754f330 100644 --- a/src/main/java/com/casic/model/DataReportParam.java +++ b/src/main/java/com/casic/model/DataReportParam.java @@ -11,25 +11,12 @@ */ @Data public class DataReportParam { - private String upPacketSN; - private String upDataSN; - private String topic; - private String timestamp; - private String tenantId; - private String serviceId; - private String protocol; - private String productId; - /** - * gas_sensor_state = 1, --事件类型 0 正常 1 低报 2 高报 - * gas_sample_value = 11-- 浓度值 - */ - private Map payload; - private String messageType; private String deviceType; - private String deviceId; - private String assocAssetId; - @JsonProperty(value = "IMSI", required = true) - private String IMSI; - @JsonProperty(value = "IMEI", required = true) - private String IMEI; + private String iotId; + private String requestId; + private Object checkFailedData; + private String productKey; + private String gmtCreate; + private String deviceName; + private Object items; } diff --git a/src/main/java/com/casic/service/DeviceDataService.java b/src/main/java/com/casic/service/DeviceDataService.java index d883fe4..457d710 100644 --- a/src/main/java/com/casic/service/DeviceDataService.java +++ b/src/main/java/com/casic/service/DeviceDataService.java @@ -3,25 +3,18 @@ import com.casic.model.DataReportParam; import com.casic.model.HeartbeatParam; import com.casic.model.ResponseData; +import org.springframework.web.bind.annotation.RequestBody; /** * @author cz * @date 2022 */ public interface DeviceDataService { - /** * * @param dataReportParam * @return */ - ResponseData DeviceDataCommit(DataReportParam dataReportParam); - - /** - * - * @param heartbeatParam - * @return - */ - ResponseData heartBeatSave(HeartbeatParam heartbeatParam); + ResponseData gasReceiver(DataReportParam dataReportParam); } diff --git a/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java index 93f0685..bb018df 100644 --- a/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java +++ b/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java @@ -1,58 +1,49 @@ package com.casic.service.impl; -import com.casic.dao.impl.DeviceDataMapper; +import com.alibaba.druid.util.StringUtils; +import com.alibaba.fastjson.JSON; import com.casic.model.*; import com.casic.service.DeviceDataService; +import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; +import java.util.Map; + /** * @author cz - * @date 2022-6-20 + * @date 2022-9-26 */ @Slf4j @Service public class DeviceDataServiceImpl implements DeviceDataService { - @Autowired - DeviceDataMapper deviceDataMapper; + private final NormalDataProcessor normalDataProcessor; - /** - * @param dataReportParam - * @return - */ - public ResponseData DeviceDataCommit(DataReportParam dataReportParam) { - ResponseData responseData = new ResponseData(); - try { - deviceDataMapper.addDeviceData(dataReportParam); - responseData.setCode(ResponseData.DEFAULT_SUCCESS_CODE); - responseData.setMessage(ResponseData.DEFAULT_SUCCESS_MESSAGE); - } catch (DataAccessException sqlex) { - responseData.setCode(ResponseData.DEFAULT_ERROR_CODE); - responseData.setMessage("请求数据异常"); - responseData.setSuccess(true); - log.error("主题:数据上报保存出现错误,异常信息为{}", sqlex); - } - return responseData; + public DeviceDataServiceImpl(NormalDataProcessor normalDataProcessor) { + this.normalDataProcessor = normalDataProcessor; } - /** - * @param heartbeatParam - * @return - */ - public ResponseData heartBeatSave(HeartbeatParam heartbeatParam) { + public ResponseData gasReceiver(DataReportParam dataReportParam) { ResponseData responseData = new ResponseData(); try { - deviceDataMapper.editDeviceData(heartbeatParam); + Map> updDataMap = new ObjectMapper().convertValue(dataReportParam.getItems(), Map.class); + DataContentParam dataContentParam = JSON.parseObject(updDataMap.get("upd_data").get("value"), DataContentParam.class); + Long uptime = Long.valueOf(String.valueOf(updDataMap.get("upd_data").get("time"))); + if (StringUtils.isEmpty(dataReportParam.getDeviceName())) { + responseData.setCode(200); + responseData.setMessage("没有设备编号"); + return responseData; + } + normalDataProcessor.normalDataProvider(dataContentParam, uptime, dataReportParam.getDeviceName()); responseData.setCode(ResponseData.DEFAULT_SUCCESS_CODE); responseData.setMessage(ResponseData.DEFAULT_SUCCESS_MESSAGE); } catch (DataAccessException sqlex) { responseData.setCode(ResponseData.DEFAULT_ERROR_CODE); responseData.setMessage("请求数据异常"); responseData.setSuccess(true); - log.error("主题:数据心跳出现错误,异常信息为{}", sqlex); + log.error("主题:设备数据上报出现错误,异常信息为{}", sqlex); } return responseData; } diff --git a/src/main/java/com/casic/service/impl/NormalDataProcessor.java b/src/main/java/com/casic/service/impl/NormalDataProcessor.java new file mode 100644 index 0000000..5375b2e --- /dev/null +++ b/src/main/java/com/casic/service/impl/NormalDataProcessor.java @@ -0,0 +1,142 @@ +package com.casic.service.impl; + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.AlarmRecordsMapper; +import com.casic.dao.DataGasMapper; +import com.casic.dao.impl.AlarmJobDao; +import com.casic.entity.AlarmJob; +import com.casic.entity.AlarmRecords; +import com.casic.entity.DataGasDector; +import com.casic.model.DataContentParam; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.springframework.util.ObjectUtils; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.Map; + +@Slf4j +@Component +public class NormalDataProcessor { + + public static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyyMMdd"); + + @Value("${casic.device.gas-dector.type}") + private String deviceType; + @Value("${casic.device.gas-dector.minutes}") + private String minutes; + + @Resource + private DataGasMapper dataGasMapper; + @Autowired + private AlarmJobDao alarmJobDao; + @Resource + private AlarmRecordsMapper alarmRecordsMapper; + + public void normalDataProvider(DataContentParam dataReportParam, Long timeStamp, String devcode) { + Map gasMap = dataGasMapper.getWellCode(devcode); + if (ObjectUtils.isEmpty(gasMap)) { + log.info("没有该设备编号录入" + devcode); + } + if (ObjectUtils.isEmpty(dataGasMapper.getLastData(minutes, devcode))) { + this.saveNormalData(dataReportParam, timeStamp, devcode, gasMap); + } + this.dataTaskJudge(dataReportParam, devcode, timeStamp, gasMap); + return; + } + + /** + * 自定义时间存库 + * @param dataReportParam + * @param timeStamp + * @param devcode + * @param gasMap + */ + private void saveNormalData(DataContentParam dataReportParam, Long timeStamp, String devcode, Map gasMap) { + DataGasDector dataGasDector = new DataGasDector(); + dataGasDector.setDevcode(devcode); + dataGasDector.setWellCode(!ObjectUtils.isEmpty(gasMap) && gasMap.containsKey("wellCode") ? gasMap.get("wellCode") : ""); + dataGasDector.setLogtime(new Date()); + dataGasDector.setUptime(new Date(timeStamp)); + dataGasDector.setDescn(dataReportParam.getMsg_type()); + dataReportParam.getRtd_val().stream().filter( + data -> { + return data != -1; + } + ).forEach( + data -> { + if (data == 65535) { + dataGasMapper.setOfflineByDevcode(devcode); + } else { + dataGasDector.setStrength(String.valueOf(data)); + dataGasMapper.insert(dataGasDector); + } + } + ); + } + + /** + * 报警就存库 + * @param dataReportParam + * @param devcode + * @param timeStamp + * @param gasMap + */ + private void dataTaskJudge(DataContentParam dataReportParam, String devcode, Long timeStamp, Map gasMap) { + List> alarmLevelList = dataGasMapper.getAlarmLevelList(deviceType); + String wellCode = !ObjectUtils.isEmpty(gasMap) && gasMap.containsKey("wellCode") ? gasMap.get("wellCode") : ""; + Long deviceId = Long.valueOf(gasMap.get("deviceId")); + dataReportParam.getRtd_val().stream().filter( + dataReport -> { + return dataReport != -1 && dataReport != 65535; + } + ).forEach( + dataReport -> { + for (Map alarmLevelMap : alarmLevelList) { + if (dataReport > Integer.valueOf(gasMap.get("high_value"))) { + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(deviceId); + alarmRecord.setDevcode(devcode); + alarmRecord.setWellCode(wellCode); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("燃气报警"); + alarmRecord.setAlarmValue(String.valueOf(dataReport)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmLevel(Integer.valueOf(alarmLevelMap.get("level").toString())); + alarmRecord.setAlarmMessage("燃气报警"); + String jobId = alarmRecordsMapper.isOldAlarmRecord(devcode, "燃气报警"); + // 超出报警阈值 生成一条报警消息 + if (!StringUtils.isEmpty(jobId)) { + alarmRecordsMapper.updateOldAlarmRecord(devcode, "燃气报警"); + alarmRecord.setAlarmMessage(jobId); + } else { + AlarmJob alarmJob = alarmJobDao.saveData(devcode, wellCode, "RQZD", "1"); + alarmRecord.setJobId(alarmJob.getId()); + } + alarmNormalData(dataReportParam, timeStamp, devcode, gasMap, dataReport); + alarmRecordsMapper.insert(alarmRecord); + } + } + } + ); + } + + private void alarmNormalData(DataContentParam dataReportParam, Long timeStamp, String devcode, Map gasMap, Integer data) { + DataGasDector dataGasDector = new DataGasDector(); + dataGasDector.setDevcode(devcode); + dataGasDector.setWellCode(!ObjectUtils.isEmpty(gasMap) && gasMap.containsKey("wellCode") ? gasMap.get("wellCode"):""); + dataGasDector.setLogtime(new Date()); + dataGasDector.setUptime(new Date(timeStamp)); + dataGasDector.setDescn(dataReportParam.getMsg_type()); + dataGasDector.setStrength(String.valueOf(data)); + dataGasMapper.insert(dataGasDector); + } +} + diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index fac2afe..d17a81a 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -3,35 +3,14 @@ ################### spring配置 ################### spring: datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/smartwell_zq?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&&useSSL=true - username: root + driver-class-name: org.postgresql.Driver + url: jdbc:postgresql://111.198.10.15:11209/smartwell_zq_cs + username: postgres password: Casic203 session: store-type: redis - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer jms: pub-sub-domain: true - # session: - # store-type: redis - activemq: - user: - password: - broker-url: tcp://192.168.0.203:61616 -#flowable数据源和多数据源配置 -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - #kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - db: - init: - enable: false - file-upload-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\upload - spring-session-open: false #开启spring session logging: level.root: error level.com.casic: error diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 86411e6..9072213 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -21,16 +21,8 @@ # sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector ################### mybatis-plus配置 ################### ################### casic配置 ################### -flowable: - checkProcessDefinitions: false #不校验process文件 casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - extUrl: sys - config: - export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ - config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file + device: + gas-dector: + type: 101 + minutes: 1200 \ No newline at end of file